0

インターネットからオブジェクトを取得しますが、BaseAdapter に直接渡すと、スクロール リストビューが非常に遅く、スムーズではありません。以下で、私はこの質問をしました:

「アプリケーションがメイン スレッドで処理しすぎている可能性があります」とスクロールすると、リスト ビューがクラッシュします。

AsyncTask を作成してデータを取得し、それをアダプターに渡して高速化し、スムーズにスクロールする方法を知りたいです。

4

2 に答える 2

0

この例のようにする

タスクを実行する

new LongOperation().execute("");

そしてタスクはこのようなものです。

private class LongOperation extends AsyncTask<String, Void, String> {

          @Override
          protected String doInBackground(String... params) {
                for(int i=0;i<5;i++) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                return "Executed";
          }      

          @Override
          protected void onPostExecute(String result) {
                TextView txt = (TextView) findViewById(R.id.output);
                txt.setText("Executed"); // txt.setText(result);
                //might want to change "executed" for the returned string passed into onPostExecute() but that is upto you
          }

          @Override
          protected void onPreExecute() {
          }

          @Override
          protected void onProgressUpdate(Void... values) {
          }
    }  

DoinBackground メソッドは、サーバーからデータをダウンロードする場所です。実行後、そのデータをベース アダプタに割り当てます。DoinBackground メソッドからビューを更新することはできません。ビューを変更するには、UIThread を使用する必要があります。

それが役に立てば幸い!!!

于 2013-07-27T09:21:06.610 に答える
0

最善の方法は、アダプターを作成して ListView に設定する前に、AsyncTask でデータをダウンロードすることです。

それでも、 ListView が既に作成されているときにデータをダウンロードする必要がある場合は、@Arman StrangerがdoInbackgound()内にすべての作業関数を実装する必要がある前に言ったように。

画像をダウンロードしたら、小さいサイズにサイズ変更し、notifyDataSetChanged()を実行してリストビューを再描画する必要があります。

于 2013-07-27T09:27:57.690 に答える