我已阅读同一问题的所有解决方案,但似乎没有找到答案。
我有一个ProgressDialog,我在AsyncTask的onPreExecute()
中显示。在doInBackground()完成后它不会被忽略。
这是我的代码: -
Main.java
case R.id.action_refresh:
new RefreshItems().execute();
return true;
private class RefreshItems extends AsyncTask<Void, Void, Void>
{
ProgressDialog refDialog ;
Fragment fragment = null;
List<News> updatedList;
@Override
protected void onPostExecute(Void result)
{
// TODO Auto-generated method stub
super.onPostExecute(result);
if(refDialog!=null && refDialog.isShowing() && refDialog.isIndeterminate())
refDialog.dismiss();
}
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
super.onPreExecute();
refDialog = ProgressDialog.show(Home.this, "", "Please wait", true, false);
}
@Override
protected Void doInBackground(Void... params)
{
// TODO Auto-generated method stub
try
{
updatedList = new GetList().execute(items).get();
fragment = new HomeFragment(SPHostUrl,encodedAccountName,deviceAuthKey,usersname,avatarUrl, fullName,getApplicationContext(),updatedList);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
// TODO Auto-generated method stub
}
答案 0 :(得分:1)
<强>问题:强>
refDialog.isIndeterminate()
你没有测量某些东西,所以它会返回false,所以它不会消除你的对话。
<强>溶液强>
在if语句中删除它
if(refDialog!=null && refDialog.isShowing())
同时删除此:
super.onPostExecute(result);
你不需要默认的onPostExecute
;
修改强>
问题2:
ProgressDialog.show(Home.this, "", "Please wait", true, false);
您将可取消设置为false
,这意味着您在解雇时无法取消。
将对话框的显示更改为:
refDialog = ProgressDialog.show(Home.this, "", "Please wait")
答案 1 :(得分:0)
你的以下情况以任何方式都会出错,
if(refDialog!=null && refDialog.isShowing() && refDialog.isIndeterminate())
只需删除该条件,只需关闭对话框
即可refDialog.dismiss();
或者,
检查你的情况,在哪种情况下它会出错。
答案 2 :(得分:0)
从if(refDialog!=null && refDialog.isShowing())
移除onPostExecute
,它会有效
如果你真的需要知道它是否显示你可以在类中创建boolean visible=false;
设置它在preExecute上为true,在Post Exec上检查它
答案 3 :(得分:0)
将对话框字段refDialog
设为静态,然后尝试
public static ProgressDialog refDialog ;