1

AsyncTask から ListView を更新しようとしています。私はこの状況を持っています:

  • アクティビティ クラスは、カスタム アダプター クラスからリスト アダプターを作成します。
  • アダプター クラスは、リスト アイテムの要素に onClickListener を設定し、別の Utilities クラスにある AsyncTask を呼び出します。

Utilities AsyncTask の onPostExecute() メソッドから notifyDataSetChanged を呼び出すにはどうすればよいですか?

4

2 に答える 2

11

元のクラス内から更新をアクティブにするコールバックとしてデリゲートを含めます。

たとえば、次のインターフェイスを追加します。

public interface AsyncDelegate {

    public void asyncComplete(boolean success);


}

次に、呼び出し元のクラスでインターフェイスを実装し、それをタスクに渡します

public class MyClass implements AsyncDelegate  {

// Class stuff
MyAsyncTask newTask = new MyAsyncTask(this);
newTask.execute();

public void asyncComplete(boolean success){
    myAdapter.notifyDataSetChanged();

}

AsyncTask で、結果を返します。

private class MyAsyncTask extends AsyncTask<Object, Object, Object> {

   private AsyncDelegate delegate;

   public MyAsyncTask (AsyncDelegate delegate){
     this.delegate = delegate;
   }

   @Override
   protected void onPostExecute(String result) {
      delegate.asyncComplete(true);
   }

}

タスクが完了すると、デリゲートが呼び出され、更新がトリガーされます。

于 2013-03-28T22:38:05.933 に答える
0

次に例を示します。

newslist は ArrayList です。nAdapter は汎用アダプターです。

最初にリストをクリアしてから、新しいコンテンツをすべて追加します。その後、コンテンツが変更されたことをアダプターに伝えます。

@Override
        protected void onPostExecute(ArrayList<HashMap<String, String>> list) {

        newsList.clear();
            newsList.addAll(list);
            nAdapter.notifyDataSetChanged();


        }
于 2013-03-28T22:28:49.713 に答える