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()inを使用する必要はないと思います。onPostExecute()

于 2012-11-13T19:33:59.800 に答える