Android 更改“切换到正确密码”的状态并关闭对话框

Android 更改“切换到正确密码”的状态并关闭对话框,android,Android,在我的应用程序中,如果密码正确,我需要关闭开关,否则它应该始终打开。 我正在显示一个对话框,用于在setOnCheckedChangeListener上询问密码, 如果密码正确,则更改切换状态 我的问题是 一旦切换更改其状态,它将再次显示对话框。 如果密码正确,对话框应关闭,同时切换状态应更改为关闭。 如何解决这个问题 我的代码: onOffSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {

在我的应用程序中,如果密码正确,我需要关闭开关,否则它应该始终打开。 我正在显示一个对话框,用于在setOnCheckedChangeListener上询问密码, 如果密码正确,则更改切换状态

我的问题是 一旦切换更改其状态,它将再次显示对话框。 如果密码正确,对话框应关闭,同时切换状态应更改为关闭。 如何解决这个问题

我的代码:

    onOffSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {          @Override           public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked)              
{
                                 if(isCorrectPin)
                {
                    onOffSwitch.setChecked(false);
                }

                    Log.v("Switch State=", ""+isChecked);
                    if(isChecked)
                    {  
                        //tv_switch_status.setText("");

                    }
                    else
                    {

                        displayPinAlert();

                    }           }       

            });

    private void displayPinAlert()
    {   
    onOffSwitch.setChecked(true);


        AlertDialog.Builder alert = new AlertDialog.Builder(activity.getParent());


        alert.setMessage("Enter Pin");

        // Set an EditText view to get user input   
       final EditText input = new EditText(activity.getParent());   
       alert.setView(input);

        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int whichButton)    
                 {          
                 String value = input.getText().toString();
                            //              

                  onOffSwitch.setChecked(false);            
                  // Do something with value!            
                  if(value.equals("1234"))          {

                    dialog.dismiss();
                    //onOffSwitch.setChecked(false);
                                isCorrectPin =true;

                }
                    }   });

        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {       public void onClick(DialogInterface dialog, int whichButton) {          // Canceled.        }   });

        alert.show();


    }

将displayPinAlert更改为:

private void displayPinAlert()
{   
onOffSwitch.setChecked(true);


    AlertDialog.Builder alert = new AlertDialog.Builder(activity.getParent());


    alert.setMessage("Enter Pin");

    // Set an EditText view to get user input   
   final EditText input = new EditText(activity.getParent());   
   alert.setView(input);

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int whichButton)    
             {          
             String value = input.getText().toString();
                        //              

              onOffSwitch.setChecked(false);            
              // Do something with value!            
              if(value.equals("1234"))          {

                dialog.dismiss();
                onOffSwitch.setChecked(false);

            }
                }   });

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {       public void onClick(DialogInterface dialog, int whichButton) {          // Canceled.        }   });

    dialog = alert.show();

}

问题的原因是您取消了对话框的旧引用,而不是上次创建的引用。

如果密码正确且代码不起作用,我想取消对话框,并将“切换”状态更改为“关闭”?崩溃?不,它正在工作,但如果密码正确,它会打开对话框OK,发布答案。它不工作,对话框被取消,但它会重新打开,因为它会更改切换状态使用布尔变量阻止SetOnCheckedChangeListener或将侦听器设置为null(SetOnChdCheckedChangeListener(null);)它将如何帮助,我尝试过使用布尔值,但不起作用。你能发布更新的代码吗?我认为这个问题是由我们给听众打电话引起的。