2013-06-11 44 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