2012-09-15 73 views
0

我遇到了一個典型的問題,這對我來說似乎很奇怪。細節是這樣的 - 在我的應用程序中的活動,有edittexts和提交按鈕。在編輯文本中填入數據後,用戶可以點擊提交按鈕。點擊提交按鈕後,根據用戶輸入的值,顯示兩個警報對話框中的任何一個。一個是成功,另一個是失敗。即使在解僱之後,警報對話框也會彈出

事情是當用戶輸入無效數據並點擊提交按鈕時,失敗的警報對話框被打開。我在失敗的警報對話框上有一個按鈕(OK),點擊它後我寫了dialog.dismiss();使其消失,以便用戶可以重新檢查數據並進行修改。但是,如果他改變方向,重新檢查數據時會重新檢查問題,然後即使沒有點擊提交按鈕,失敗的警報對話框也會彈出。請建議。

額外的細節(雖然可能不需要這個問題):在改變方向時,活動被重新創建。因此,我將當前數據保存在onSavedInstanceState()中,並在onCreate()方法中檢索它以設置edittext中的值。一切工作正常,但一旦點擊提交按鈕,相應的警報對話框出現。然後在改變方向後,對話框再次彈出。我確信我寫了showDialog(1);onClick()方法,但再次爲什麼控制重新回到onClick並顯示該警報對話框,即使沒有點擊。

protected Dialog onCreateDialog(int id) { 
    switch(id){     
     case 0:   
     return new AlertDialog.Builder(this) 
         .setMessage("Success!") 
         .setIcon(R.drawable.success) 
         .setPositiveButton("OK", 
         new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss();     
         } 
         }).show(); 
     case 1: 
      return new AlertDialog.Builder(this) 
         .setMessage("Failed") 
         .setIcon(R.drawable.failure) 
         .setPositiveButton("OK", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.dismiss();  
           return; 
          } 
         }).show(); 
      } 
      return null; 
     } 

這裏是使警報對話框顯示的方法。

public void onClick(View v) { 
    switch (v.getId()) {  
     //Here there are other cases too. 
     case R.id.submit: 
     getEditTexts(); 
     validator(); 
     break; 
    } 
} 

public void validator() {    
    if(generator.receiveVal(0,0,sudo)) { 
     showDialog(0); 
    } 
    else if(!generator.receiveVal(0,0,sudo)) { 
     showDialog(1); 
    } 
} 
+1

它很好,如果你發佈代碼.. – user370305

+0

@ user370305請查看我添加的代碼片段。 – Kanth

+0

將答案標記爲已接受。 –

回答

3

只需在.show()的位置嘗試替換.create()即可。你的情況是這樣的:

case 1: 
       return new AlertDialog.Builder(this) 

       .setMessage("Failed") 
       .setIcon(R.drawable.failure) 
       .setPositiveButton("OK", 
         new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, int which) { 

          dialog.dismiss(); 

          return; 
         } 
        }).create(); //Here replaced .show with .create() 
+0

謝謝。有效。但是,請你解釋爲什麼.show()不起作用。 – Kanth

+1

@Appu:Activity的方法'onCreateDialog()'實際上將一個'Dialog'作爲返回值,'Activity'負責顯示它,你正在做的是,你自己展示它,'Activity'顯示它通過它自己。所以這就是爲什麼它再次強化。 –

2

這只是一個想法,但看起來問題是,onOrientation正試圖重新繪製活動。

嘗試類似如下:

android:configChanges="orientation" 

所以它看起來像

<activity android:label="@string/app_name" 
    android:configChanges="orientation" 
    android:name=".your.package"> 

的問題是,該系統:

您可以在此清單中增加了活動的聲明在發生配置更改時破壞活動。請參閱ConfigurationChanges

所以把它放在配置文件中可以避免系統破壞你的活動。相反,它調用onConfigurationChanged(Configuration)方法。

希望這會有所幫助。

+0

是的。當然,很明顯,新的活動將在屏幕方向上創建(我已經在我的問題的額外細節中提到過)。我不想通過放置configChanges來限制活動的破壞。因爲我有兩個xml用於佈局和佈局域中的各個模式。即使在Google文檔中,您也可以發現onConfigChanges方法應該是最後的選擇。你能否更新你的答案與我的問題有關? – Kanth

+0

似乎你現在有正確的答案。 –

+0

是的。不過謝謝,你的時間+1。 – Kanth