0

我使用互联网服务来填写列表视图。当用户按下刷新按钮时,我想刷新列表视图项。我怎样才能做到这一点?

在 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);
        }
    });
}
4

1 回答 1

1

最基本的方法是清空noteList并再次运行 AsyncTask。

  1. 内部onPreExecute()(或第一行doInBackground())调用:

    noteList = new ArrayList<Map<String, String>>(); // or noteList.clear();
    
  2. 再次调用 AsyncTask 的execute()方法。

另外我不相信你需要使用runOnUiThread()inonPostExecute()因为它已经可以访问主线程。

于 2012-11-13T19:33:59.800 回答