6

AsyncTask で生成されたリストをアクティビティに返すにはどうすればよいですか?

私の LoadStringsAsync クラス:

public class LoadStringsAsync extends AsyncTask<Void, Void, List<String> > {

    List<String> str;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        ...
    }

    @Override
    protected List<String> doInBackground(Void... arg0) {
        ...
        get content from the internet
        and
        fill the list
        ...
    }

    @Override
    protected void onPostExecute(List<String> str) {
        super.onPostExecute(events);
        ...

    }
}

それを操作するには、リストをアクティビティに戻す必要があります。(いいえ、ListView に表示するだけではありません:P)

これを行う方法について何か提案はありますか? :-)

これまでありがとう!

4

5 に答える 5

2

AsyncTask を Activity の内部クラスにすると、onPostExecute は Activity と同じコンテキストになり、Activity のどこでも同じように List を使用できます。

AsyncTask を Activity の内部クラスにしない場合は、AsyncTask が終了したときに Activity にコールバックするようにリスナーを設定する必要があります。そのルートに行きたい場合は、この投稿を見てください。

あなたの質問に似たこの投稿もあります。

于 2013-07-11T14:35:47.990 に答える
2

Androidリンクのドキュメントによると、メソッドを使用してget計算結果を返すことができます。AsyncTask はリストを返していることを示しているので、非同期クラスを呼び出しているクラスで次のコードを試すことができます

List<String> returnedlist=new LoadStringAsync().execute().get();

このオプションが役立つことを願っています。

于 2017-08-21T10:00:01.587 に答える
0

リストを使用するコード、またはリストを変数に設定するコードを 内に配置しonPostExecute()ます。

次のような親アクティビティからタスクを実行することをお勧めします。

public class MyActivity extends Activity{
  private List<String> mData = new ArrayList<String>();


  private void runTask(){
    new LoadStringsAsync(){

      @Override
      protected void onPostExecute(List<String> str) {
        super.onPostExecute(events);
        mData.clear();
        mData.addAll(str);
      }

    }.execute();
  }
}
于 2013-07-11T14:34:25.413 に答える