如何防止自定义对话框在asynctask onPostExecute中弹出两次?

时间:2014-02-17 05:18:52

标签: android android-asynctask customdialog

我在AsyncTask中的onpostexecute方法中使用自定义对话框,它会被弹出两次。当用户点击按钮时必须关闭对话框,这似乎工作正常。

有人能说清楚为什么会被召唤两次吗?

@Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    if (pDialog != null) {
        pDialog.dismiss();
    }

    try {
        if (responseFromServer.contains("x")) {
            // Pop up to create password
            final Dialog dialog = new Dialog(getActivity());
            dialog.setContentView(R.layout.dialog_password);
            dialog.setTitle("Title...");
            dialog.setCancelable(false);

            final TextView etpassword = (TextView) dialog.findViewById(R.id.etpassword_dialog);
            final Button btnpassword = (Button) dialog
                    .findViewById(R.id.btnsavepassword_dialog);

            btnpassword.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    if (etpassword.getText().toString().length() == 0) {
                        Toast.makeText(getActivity(), "Enter password", Toast.LENGTH_SHORT)
                                .show();
                    } else if (etpassword.getText().toString().length() < 6) {
                        Toast.makeText(getActivity(),
                                "Password should contain minimmum 6 characters",
                                Toast.LENGTH_SHORT).show();
                    } else {
                        dialog.dismiss();

                    }

                }
            });

            if (!dialog.isShowing()) {
                dialog.show();
            }

        }

        else {
            Toast.makeText(getActivity(), "Unexpected error occurred. Please try again",
                    Toast.LENGTH_SHORT).show();
        }

    } catch (Exception e) {
        Log.v("Main FRagment FB async::::::", e.getMessage());
    }

}    

2 个答案:

答案 0 :(得分:2)

您可以在显示自定义对话框

之前编写以下条件
if ( !dialog.isShowing() )
{
   dialog.show();
}

答案 1 :(得分:0)

您的代码是正确的,代码中没有问题。单击检查按钮。我认为你正在调用两次AsyncTask的execute()方法。 你可以发布调用代码,就像你如何调用AsyncTask fron按钮点击一样。