2012-03-23 103 views
0

當我點擊一個未選中的複選框時,它將被檢查並出現一個對話框,其中包含Save和Cancel按鈕(以及其他對象)。當用戶點擊保存,數據被保存,複選框保持被選中,每個人都很高興。當用戶點擊取消時,複選框被取消選中,對話框被解除,但其他條件變爲活動狀態(打開else部分中的對話框)創建一個infite循環,我在圖中單擊Cancel按鈕,它被解散,但第一個圖表顯示等等。點擊取消按鈕後,如何打開這個循環,取消選中/取消選中複選框?Android如何退出無限循環(複選框和對話框)

chPassword.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

       @Override 


public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

       if (buttonView.isChecked()) { 
        Log.i("cb status", "true"); 


        dialog_newpass = new Dialog(Settings.this); 
        dialog_newpass.setContentView(R.layout.dialog_password_seton); 
        dialog_newpass.setTitle("  Set new password  "); 
        dialog_newpass.setCancelable(true); 

        et_newpass = (EditText) dialog_newpass.findViewById(R.id.EditText_Password); 
        et_confirmpass = (EditText) dialog_newpass.findViewById(R.id.EditText_Password2); 

        btn_SavePass = (Button) dialog_newpass.findViewById(R.id.btn_savePass); 
        btn_SavePass.setOnClickListener(new View.OnClickListener() 
        { 

         @Override 
         public void onClick(View v) { 

          SavePassword("showpassword", "true"); 
           dialog_newpass.dismiss(); 
          } 
         } 
        }); 

        btn_CancelPass = (Button) dialog_newpass.findViewById(R.id.btn_cancelPass); 
        btn_CancelPass.setOnClickListener(new View.OnClickListener() 
        { 
         public void onClick(View v) 
         { 
          dialog_newpass.dismiss(); 
          chPassword.setChecked(false); //due to this, the else condition becomes active 
         } 
        }); 

        dialog_newpass.show(); 

       } 
       else 
       { 

        Log.i("cb status", "false"); 
        dialog_confirmpass = new Dialog(Settings.this); 
        dialog_confirmpass.setContentView(R.layout.dialog_password_setoff); 
        dialog_confirmpass.setTitle("  Enter password  "); 
        dialog_confirmpass.setCancelable(true); 

        et_pass = (EditText) dialog_confirmpass.findViewById(R.id.EditText_Password); 

        btn_SavePass = (Button) dialog_confirmpass.findViewById(R.id.btn_savePass); 
        btn_SavePass.setOnClickListener(new View.OnClickListener() 
        { 
         @Override 
         public void onClick(View v) { 
          SavePassword("showpassword", "false"); 
           dialog_confirmpass.dismiss(); 
          } 
         } 
        }); 

        btn_CancelPass = (Button) dialog_confirmpass.findViewById(R.id.btn_cancelPass); 
        btn_CancelPass.setOnClickListener(new View.OnClickListener() 
        { 
         public void onClick(View v) 
         { 
          dialog_confirmpass.dismiss(); 
          chPassword.setChecked(true); //due to this, the if condition becomes active 
         } 
        }); 

        dialog_confirmpass.show(); 

       } 

      } 
     }); 

回答

1

你可以一個布爾值添加到您的活動類:

boolean canceled; 

然後將其設置爲true,在您的取消處理程序:

btn_CancelPass.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) 
    { 
     canceled = true; 
     dialog_newpass.dismiss(); 
     chPassword.setChecked(false); 
    } 
}); 

,然後檢查它的其他塊內:

else 
{ 
    if(canceled){ 
     canceled = false; 
     return; 
    } 

    // other stuff 
} 
+0

我接受您的解決方案但我真的不得不在這上面工作幾個小時才能工作。我甚至不得不實施另一個變量。 – erdomester 2012-03-25 17:23:11