little_1999 2020-03-24 00:52 采纳率: 0%
浏览 223
已采纳

android的CheckBox点击全选信息反馈不正常,该如何解决?

点击全选,反馈的信息是没有,而取消全选反而反馈全了,为什么会这样?该如何解决?
图片说明

public class CheckBoxActivity extends AppCompatActivity {

    private CheckBox eatCheckBox,sheepCheckBox,gameCheckBox,allCheckBox;
    private Button button;
    private TextView textView1,textView2;

    private CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            String resultString = "";
            if (eatCheckBox.isChecked()) {
                resultString+=eatCheckBox.getText().toString()+" ";
            }
            if (sheepCheckBox.isChecked()) {
                resultString+=sheepCheckBox.getText().toString()+" ";
            }
            if (gameCheckBox.isChecked()) {
                resultString+=gameCheckBox.getText().toString()+" ";
            }
            if (buttonView.getId()==R.id.allCb) {
               if(allCheckBox.isChecked()){
                   eatCheckBox.setChecked(true);
                   sheepCheckBox.setChecked(true);
                   gameCheckBox.setChecked(true);
               }
               else if(eatCheckBox.isChecked()&&sheepCheckBox.isChecked()&&gameCheckBox.isChecked()){
                   eatCheckBox.setChecked(false);
                   sheepCheckBox.setChecked(false);
                   gameCheckBox.setChecked(false);
               }
            }
            else{
                if(eatCheckBox.isChecked()&&sheepCheckBox.isChecked()&&gameCheckBox.isChecked()){
                    allCheckBox.setChecked(true);
                }
                else{
                    allCheckBox.setChecked(false);
                }
            }
            textView1.setText("你的爱好是:"+resultString);
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_check_box);

        eatCheckBox=findViewById(R.id.eatCb);
        sheepCheckBox=findViewById(R.id.sheepCb);
        gameCheckBox=findViewById(R.id.gameCb);
        allCheckBox=findViewById(R.id.allCb);
        button=findViewById(R.id.btn);
        textView1=findViewById(R.id.tv1);
        textView2=findViewById(R.id.tv2);

        eatCheckBox.setOnCheckedChangeListener(listener);
        sheepCheckBox.setOnCheckedChangeListener(listener);
        gameCheckBox.setOnCheckedChangeListener(listener);
        allCheckBox.setOnCheckedChangeListener(listener);
    }
}

  • 写回答

1条回答 默认 最新

  • 代码的灵魂是bug! 2020-03-24 10:27
    关注

    首先你的resultString不应该定义在check事件中,应该定义在外面,然后在每次check事件改变时清空resultString的内容,代码如下:
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题