在NotifyDataSetChanged数组适配器期间冻结的UI

时间:2012-06-20 11:45:52

标签: android listview dialog adapter

我正在从Facebook搜索一些页面,然后下载他们的照片。 我想立即在我的列表中查看它们,并在每次下载新图片时更新适配器。我在另一个活动中使用相同的方法并且它可以工作,但是在这里我使用对话框并冻结我的UI直到一切都完成,即使我在后台进行。为什么呢?

private synchronized void getUserLikesImages() {AsyncTask<Void, Void, Bitmap> task = new AsyncTask<Void, Void, Bitmap>() {

        @Override
        public Bitmap doInBackground(Void... params) {
        for(...){
               //download one picture...
               FacebookeventsActivity.this.runOnUiThread(new Runnable() {
               public void run() {
                        pagesILikeArrayAdapter.notifyDataSetChanged();
               }
            });

        }
      };
   task.execute();
   }

它有效,但UI被冻结直到操作结束......我想这可能是因为我的列表在对话框中并且我在UIThread上运行它,但我不知道如何修复它

1 个答案:

答案 0 :(得分:2)

@Override
        public Bitmap doInBackground(Void... params) {
for(...){
//download one picture...

  }
 };


@Override
onPostExecute()
{
 pagesILikeArrayAdapter.notifyDataSetChanged();
}

只需添加onPostExecute()并通知适配器..或者只是添加onProgreesUpdate()方法并使用publishProgress()中的doInBackGround() 定期通知适配器..