1

リストビューのすべての行が別の Web サービスからデータを取得するアプリで listView を使用しています。現在、私は次の方法でこれを行っています。

    public View getView(final int position, View convertView, ViewGroup parent) {
         ViewHolder viewHolder;
          ...
          ... 
          DownloadData downloadData = new DownloadData(viewHolder); 
          downloadData.execute();
          return convertView;
     }

    class DownloadData extends AsyncTask<Void,Void,Void> //Downloads and update viewHolder
    {
     .....
    }

それは完全に実行されます。ただし、アダプター内でスレッド化を行うことは想定されていないため、これは良い設計ではないと思います。これに対するより良いアプローチはありますか?

PS: 私の Web サービスには制約があり、この問題を解決するためにそれを変更することはできません

4

1 に答える 1

3

でこれを実行したくないことは間違いありませんgetView()getView()一部のオブジェクトをビューに変換するだけで、データを取得する責任はありません。

リストビューの作成前または作成中に、必要なすべてのデータがあることを確認します。

言い換えれば、このアダプターの外側で、すべての非同期メソッドを呼び出して、アダプターに渡す正しいオブジェクトを返すようにしないのはなぜでしょうか?

それらがすべて完了するまで待つか、それらを並行して呼び出して、それぞれが終了するたびにアダプターを更新し、notifyDatasetChanged().

于 2013-06-19T12:05:36.457 に答える