ProgressDialog没有在onPostExecute()android中解雇

时间:2014-06-24 08:44:13

标签: android progressdialog

我已阅读同一问题的所有解决方案,但似乎没有找到答案。 我有一个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

}

4 个答案:

答案 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 ;