2013-06-11 79 views
0

我试图通过单击按钮来刷新我的列表视图。我用notifyDataSetChanged但它不令人耳目一新。通过点击android上的按钮刷新列表视图

static final String TAG_RESULTS="results"; 
static final String TAG_TWEET="text"; 
static final String TAG_USER_ID = "from_user_id_str"; 
static final String TAG_USER_NAME = "from_user"; 
static final String TAG_PIC_URL="profile_image_url"; 
static final String TAG_TWEET_ID="id_str"; 
//static final String URL="http://search.twitter.com/search.json?q="; 
static final String URL="https://api.twitter.com/1.1/search/tweets.json?q="; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tweet); 

    String url = getIntent().getStringExtra("url"); 
    JSONParser jParser = new JSONParser(); 
    JSONObject json = jParser.getJSONFromUrl(url); 
    Log.i("deneme", json.toString()); 

    try { 
     results = json.getJSONArray(TAG_RESULTS); 

     tweets=new String[results.length()]; 
     user_ids=new String[results.length()]; 
     user_names=new String[results.length()]; 
     pic_urls=new String[results.length()]; 
     tweet_ids=new String[results.length()]; 



     for(int i = 0; i < results.length(); i++){ 
      JSONObject c = results.getJSONObject(i); 

      tweets[i]= c.getString(TAG_TWEET); 
      user_ids[i]= c.getString(TAG_USER_ID); 
      user_names[i]= "@"+c.getString(TAG_USER_NAME); 
      pic_urls[i]= c.getString(TAG_PIC_URL); 
      tweet_ids[i]= c.getString(TAG_TWEET_ID); 


     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 


    lv= (ListView) findViewById(R.id.listView); 
    final LazyAdapter adapter = new LazyAdapter(this, pic_urls, user_names, tweets); 
    lv.setAdapter(adapter); 

    refreshButton= (ImageButton) findViewById(R.id.imageButton); 
    refreshButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(TweetActivity.this,"tık tık", Toast.LENGTH_LONG).show(); 

      adapter.notifyDataSetChanged(); 

    } 
}); 
}} 

而且也是我写这我的适配器

public void notifyDataSetChanged() { super.notifyDataSetChanged(); }

有什么问题吗?

+0

你还没有更改任何关于按钮点击的数据?并使用Asynctask在您的视图中获取数据和绑定。 – Oam

+0

@Oam我从Web服务获取数据。数据总是在那里变化,但是当我点击按钮时,列表视图不会改变。 如果你给我更多关于如何使用Asynctask的信息,我会很高兴。 – MSr

+0

根据您的代码,来自Web服务的数据最初会加载,并且当单击该按钮时您并未调用Web服务,因此看起来它不会被刷新。把'asynctask',在'doInBackground'中调用web服务,并在'onPostExecute'中设置适配器,然后在按钮单击时,再次调用你的asynctask。检查这个asynctask http://stackoverflow.com/questions/9671546/asynctask-android-example – Oam

回答

0

我清理了一下你的代码。试试这个:

private static final String TAG_RESULTS="results"; 
private static final String TAG_TWEET="text"; 
private static final String TAG_USER_ID = "from_user_id_str"; 
private static final String TAG_USER_NAME = "from_user"; 
private static final String TAG_PIC_URL="profile_image_url"; 
private static final String TAG_TWEET_ID="id_str"; 
private static final String URL="https://api.twitter.com/1.1/search/tweets.json?q="; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tweet); 

    mListView = (ListView) findViewById(R.id.listView); 
    mRefreshButton = (ImageButton) findViewById(R.id.imageButton); 

    if (mRefreshButton != null) { 
     mRefreshButton.setOnClickListener(this); 
    } 

    if (getIntent() != null) { 
     String url = getIntent().getStringExtra("url"); 
    } 

    JSONParser jParser = new JSONParser(); 
    JSONObject json = jParser.getJSONFromUrl(url); 
    Log.i("deneme", json.toString()); 

    try { 
     results = json.getJSONArray(TAG_RESULTS); 

     tweets = new String[results.length()]; 
     user_ids = new String[results.length()]; 
     user_names = new String[results.length()]; 
     pic_urls = new String[results.length()]; 
     tweet_ids = new String[results.length()]; 

     for (int i = 0; i < results.length(); i++) { 
      JSONObject c = results.getJSONObject(i); 

      tweets[i] = c.getString(TAG_TWEET); 
      user_ids[i] = c.getString(TAG_USER_ID); 
      user_names[i] = "@"+c.getString(TAG_USER_NAME); 
      pic_urls[i] = c.getString(TAG_PIC_URL); 
      tweet_ids[i] = c.getString(TAG_TWEET_ID); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    LazyAdapter adapter = new LazyAdapter(this, pic_urls, user_names, tweets); 
    mListView.setAdapter(adapter); 
} 

@Override 
public void onClick(View view) { 
    if (view == mRefreshButton) { 
     Toast.makeText(this,"tık tık", Toast.LENGTH_LONG).show(); 
     ((LazyAdapter) mListView.getListAdapter()).notifyDataSetChanged(); 
    } 
} 
+0

它仍然不刷新:/ @baptisterobert – MSr

+1

对不起,试试这个: ((LazyAdapter)mListView.getListAdapter())。notifyDataSetChanged( ); – baptisterobert