我有一个自定义列表,我想在点击操作栏按钮时刷新。 此列表位于片段内。
我希望在刷新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.
如何在显示进度对话框时刷新列表?
答案 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();
}
}