首页 > 解决方案 > 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();
                }
            }
        });
    }
}

标签: android

解决方案


这是因为你先做

    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 等


推荐阅读