2012-11-13 43 views
0

我使用Internet服務來填充列表視圖。我想在用戶按下刷新按鈕時刷新列表視圖項目。我怎樣才能做到這一點?清除ListView項目並在Android中刷新

在的AsyncTask和postExecute我填的是列表視圖:

protected void onPostExecute(String file_url) { 
    pDialog.dismiss(); 
    try { 
     if (jSon.has(KEY_SUCCESS)) { 
      String success = jSon.getString(KEY_SUCCESS); 
      if (success.equals("1")) { 

       notes = jSon.getJSONObject("notes"); 
       for (int i = 0; i < notes.length(); i++) { 
        JSONObject c = notes.getJSONObject(Integer 
          .toString(i)); 

        Log.i("JSONObject c >>", c.toString()); 

        String id = c.getString(KEY_NOTE_ID); 
        String subject = c.getString(KEY_NOTE_SUBJECT); 
        String date = c.getString(KEY_NOTE_DATE); 

        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(KEY_NOTE_ID, id); 
        map.put(KEY_NOTE_SUBJECT, subject); 
        map.put(KEY_NOTE_DATE, date); 

        noteList.add(map); 
       } 

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

    runOnUiThread(new Runnable() { 

     public void run() { 
      ListAdapter adapter = new SimpleAdapter(AllNotes.this, 
        noteList, R.layout.list_item, new String[] { 
          KEY_NOTE_ID, KEY_NOTE_SUBJECT, 
          KEY_NOTE_DATE }, new int[] { 
          R.id.list_lbl_id, R.id.list_lbl_subject, 
          R.id.list_lbl_date }); 
      setListAdapter(adapter); 
     } 
    }); 
} 
+0

當你簡單地在你的AsyncTask上再次調用execute()時會發生什麼? – Sam

+0

@Sam之前的項目已保留並再次出現在列表視圖中。例如,如果在列表視圖我有item1,item2,item3,刷新後我有item1,item2,item3,item1,item2,item3在列表視圖中。 –

+1

嘗試在'onPreExecute()'中重新初始化'noteList'或調用'noteList.clear();'。 – Sam

回答

1

最基本的方法是空noteList並再次運行的AsyncTask。

  1. onPreExecute()(或doInBackground()的第一行)調用其中:

    noteList = new ArrayList<Map<String, String>>(); // or noteList.clear(); 
    
  2. 再次撥打您的AsyncTask的​​方法。

此外,我不相信你需要使用runOnUiThread()onPostExecute(),因爲它已經訪問了主線程。

+0

最好在'doInBackground'中使用'runOnUiThread()'? –

+1

我的意思是你應該可以創建適配器並在'onPostExecute()'中調用'setAdapter()',而不將它包裝在'runOnUiThread()'中。 (如果你的代碼有效,你不需要改變任何東西。) – Sam