android - CheckBox.isChecked() 未返回预期值
问题描述
我是 Android 开发的初学者。我只是想就我遇到的问题寻求帮助。问题如下图所示。应用程序显示错误的 Toast 文本,其中预期的 Toast 消息是:
Dog: True Cat: False Cow: False
但实际的 Toast 消息是:
Dog: True Cat: True Cow: False
下面是我的 MainActivity 代码:
package com.example.johnsethsalazar.checkbox;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private CheckBox c1, c2, c3; // Declaring Checkbox Variables.
private Button select;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addListenerOnButton();
AddListenerToCheckBox1();
}
public void addListenerOnButton()
{
c1 = (CheckBox) findViewById(R.id.checkBox);
c2 = (CheckBox) findViewById(R.id.checkBox2);
c3 = (CheckBox) findViewById(R.id.checkBox3);
select = (Button) findViewById(R.id.button);
select.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
StringBuffer result = new StringBuffer();
result.append("Dog : ").append(c1.isChecked());//Gives True if Check and False if Not.
result.append("Cat : ").append(c2.isChecked());
result.append("Cow : ").append(c3.isChecked());
Toast.makeText(MainActivity.this, result.toString(), Toast.LENGTH_LONG).show();
}
});
}
public void AddListenerToCheckBox1()
{
c2 = (CheckBox) findViewById(R.id.checkBox);
c2.setOnClickListener(new View.OnClickListener()//Shows Toast("Dog is Selected") when Checkbox is Clicked.
{
@Override
public void onClick(View view)
{
if (((CheckBox) view).isChecked())
{
Toast.makeText(MainActivity.this, "Dog is Selected.", Toast.LENGTH_LONG).show();
}
}
});
}
}
解决方案
这是因为你先做
c1 = (CheckBox) findViewById(R.id.checkBox);
c2 = (CheckBox) findViewById(R.id.checkBox2);
c3 = (CheckBox) findViewById(R.id.checkBox3);
在您的 addListenerOnButton() 中是正确的,但随后您调用 AddListenerToCheckBox1()
c2 = (CheckBox) findViewById(R.id.checkBox);
用 dog 复选框覆盖 c2 的值。
我建议为您的复选框命名更人性化的名称,这样您就不会混淆它们。
命名约定建议使用 checkBoxDog、checkBoxCat 等
推荐阅读
- c - 为什么我的 MingW-64 位编译的 64 位 Windows .EXE 在添加简单的字符串分配时会崩溃,而对于 32 位它可以正常工作?
- android - 如何在 Jetpack Compose 中管理 2D 网格 UI 的状态?
- amazon-web-services - 使用 POSTMan 调用 APIGateway 时不执行请求验证
- javascript - 在 Node.js 中承诺在代码中存储和使用 JSON
- storage - 谷歌文档如何存储在磁盘上?
- python - 在 xml 字符串 python 中格式化动态值时出错?
- angular - 如何从角度路由中获取电子邮件?
- javascript - 将两个变量加在一起/查找
- c - 使用 gcc 编译器在 C 中未定义对“LoadLibraryA@4”错误的引用
- python - sklearn找到线性回归系数的名称