复选框只能工作一次?

Check box only works once?

在我的 Android 应用程序中有一个密码 editText,它通常显示点而不是字母,在它下面有一个标记为显示密码的复选框。第一次选中该复选框时,密码会显示,但如果未选中,则不会重新隐藏。我将状态从开始时隐藏切换为开始时显示,第一次取消选中复选框会隐藏,但随后的点击不会取消隐藏。唯一涉及的代码是:

public void chkShowKey_click ( View v ) {
if ( showKey.isChecked ( ) ) {
  txtPassKey.setInputType ( 144 );
} else {
  txtPassKey.setInputType ( 128 );
}

}

怎么了?在 if 语句检查值之前 isChecked() 没有改变吗?

当我尝试时:

YourCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { //NOW USE THE BOOLEAN TO CHECK IF CHECKED } } );

我得到

使用此代码进一步测试

chkShowKey.setOnCheckedChangeListener ( new CompoundButton.OnCheckedChangeListener ( ) {
                @Override
                public void onCheckedChanged ( CompoundButton buttonView, boolean isChecked ) {
                    if ( isChecked ) {
                        txtPassKey.setInputType ( InputType.TYPE_TEXT_VARIATION_NORMAL );
                        FancyToast.makeText(MainActivity.this,"Show",FancyToast.CONFUSING,FancyToast.LENGTH_SHORT,false).show();    
                      } else {
                        txtPassKey.setInputType ( InputType.TYPE_TEXT_VARIATION_PASSWORD );
                          FancyToast.makeText(MainActivity.this,"Hide",FancyToast.CONFUSING,FancyToast.LENGTH_SHORT,false).show();
                      }
                      //FancyToast.makeText(MainActivity.this,"Checkbox changed!",FancyToast.CONFUSING,FancyToast.LENGTH_SHORT,false).show();

                  }
              }
          );

显示事件正在触发并且 isChecked 正在更改,一切正常,除了 txtPassKey.setInputType ( InputType.TYPE_TEXT_VARIATION_PASSWORD );

您可以简单地设置一个 setOnCheckedChangeListener 然后检查是否在点击事件中检查并相应地处理 editText

YourCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

   @Override
   public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
//NOW USE THE BOOLEAN TO CHECK IF CHECKED
   }
}
);

如果您尝试显示和隐藏密码,请按照以下步骤操作

要显示或隐藏点而不是密码,请设置 PasswordTransformationMethod:

yourEditText.setTransformationMethod(new PasswordTransformationMethod());

当然,您可以在 xml 布局中的 edittext 元素中使用

默认设置此项
android:password

要重新显示可读密码,只需将 null 作为转换方法:

 yourEditText.setTransformationMethod(null);

根据您的要求尝试以下代码。只需根据您的复选框 ID 进行更改即可。

复选框事件

public void onCheckboxClicked(View view) {

    boolean checked = ((CheckBox) view).isChecked();

    switch(view.getId()) {
        case R.id.chk1:
            if (checked)
            {System.out.println("if Part);}
              else
           {System.out.println("Else Part);}

            break;
        Perform your logic
    }
}