在AsyncTask android中刷新自定义列表

时间:2014-07-15 10:34:30

标签: android list android-asynctask refresh progressdialog

我有一个自定义列表,我想在点击操作栏按钮时刷新。 此列表位于片段内。

我希望在刷新List之前显示ProgressBar。

目前我这样做: -

private class RefreshList extends AsyncTask<Void, Void, Void>
{

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        if(refDialog!=null)
        {
            refDialog.dismiss();
        }
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();

        if(refDialog!=null)
        {
            refDialog =null;
        }
        refDialog =  WaitProgressFragment.newInstance();

        refDialog.show(getFragmentManager(), "Wait");


    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        //stagAdaper.notifyDataSetChanged();

        itemsAdapter.notifyDataSetChanged();



        return null;
    }

}

但是我收到了这个错误

Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

如何在显示进度对话框时刷新列表?

2 个答案:

答案 0 :(得分:0)

itemsAdapter.notifyDataSetChanged();

onPostExecute内。

notifyDataSetChanged是一个UI操作,doInBackground不适用于UI线程,而onPostExecute则适用。

答案 1 :(得分:0)

您必须将后台任务的一部分移动到UI线程,因此请在itemsAdapter方法中将onPostExecute通知为

  @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        itemsAdapter.notifyDataSetChanged()

        if(refDialog!=null)
        {
            refDialog.dismiss();
        }
    }