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()中实现所有工作功能之前所说的那样。

Fe 当你下载图片时,你应该将其调整为更小的尺寸并执行notifyDataSetChanged()来重绘你的列表视图。

于 2013-07-27T09:27:57.690 回答