2014-02-17 26 views
2

我在AsyncTask中的onpostexecute方法中使用自定義對話框,它被彈出兩次。當用戶點擊一個按鈕時,對話框必須關閉,這似乎工作正常。如何防止自定義對話框在onPostExecute的asynctask中彈出兩次?

有人可以闡明爲什麼它被稱爲兩次?

@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()); 
    } 

}  
+0

你是說onPostExecute被兩次調用同一個任務嗎?或者這個對話是神祕地彈出兩次? (按順序 - 第一個被排除之後的一個,或者兩個都一起?)或者是否有可能有多個可能並行運行的任務?我懷疑當你的對話框可見(並且抽取消息)時,其他任務正在完成並且正在調用onPostExecute。這只是一個猜測。 – selbie

+0

@ user3121673您是否試圖說您的'ProgressDialog'顯示兩次?或者你的'Custom Dialog'顯示兩次? – GrIsHu

+0

你在工作片段的活動嗎? – Piyush

回答

2

您可以顯示一個自定義對話框之前寫下面的條件,

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

試過了,它不工作。 – Anirudh

+0

試試這個,而不是聲明'final Dialog dialog = new Dialog(getActivity());'在類級聲明對話框對話框。 – user3317558

+0

這也不起作用。 – Anirudh

0

你的代碼是正確的存在的代碼沒有問題。點擊按鈕。我認爲你正在調用兩次AsyncTask的execute()方法。 你可以發佈調用代碼,比如你如何調用AsyncTask fron按鈕單擊。

相關問題