为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java中使用复选框的开关进行多种组合?

如何在Java中使用复选框的开关进行多种组合?

拉风的咖菲猫 2023-08-16 18:21:15
这是我在这里发表的第一篇文章,所以它可能做得不太好...我是一名软件开发学生,现在我正在学习 Android 应用程序开发。我被要求制作一个带有 4 个复选框的程序,这样当我选中其中任何一个时,应用程序就会显示一张特定的图片。例如。复选框 1:人员。复选框 2:汽车。复选框 3:街道。复选框 4:音乐。如果我检查 1(人)和 2(汽车),它应该在同一张图片中显示一个人和一辆车......我正在研究这个。我认为这是制作该程序的好方法,但我不知道如何使其正常工作。我尝试这样做:MainActivity.Java:package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.widget.CheckBox;import android.widget.ImageView;public class MainActivity extends AppCompatActivity {    CheckBox cb1, cb2, cb3, cb4;    ImageView img;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        cb1 = findViewById(R.id.persona);        cb2 = findViewById(R.id.car);        cb3 = findViewById(R.id.calle);        cb4 = findViewById(R.id.music);        img = findViewById(R.id.imagen);        int pattern = (cb1.isSelected() ? 0b0001 : 0)                | (cb2.isSelected() ? 0b0010 : 0)                | (cb3.isSelected() ? 0b0100 : 0)                | (cb4.isSelected() ? 0b1000 : 0);        switch (pattern) {// No selection            case 0b0000:                img.setImageResource(R.drawable.def);                break;            //Person            case 0b0001:                img.setImageResource(R.drawable.wick);                break;            //Car            case 0b0010:                img.setImageResource(R.drawable.car);                break;        }    }}但是当我运行应用程序时,它只显示默认图像(似乎只有 case 0b0000 有效?),即使我在 xml 中创建了一个特定的复选框选中=“true”...我也尝试为每个创建一个 onClick 事件复选框来拥有它,但似乎我没有以正确的方式使用模式变量。如果我得到帮助,我将非常感激...我想我可以用 Ifs 来做到这一点,但我个人对我在帖子中读到的方式感兴趣哈哈哈。
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

您需要将侦听器附加到复选框并将该模式检查移至方法内部onCheckedChanged()。通过这种方式,您的复选框可以通知活动并重新计算 的值pattern:


public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {


    CheckBox cb1, cb2, cb3, cb4;

    ImageView img;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        cb1 =  findViewById(R.id.persona);

        cb2 = findViewById(R.id.car);

        cb3 = findViewById(R.id.calle);

        cb4 = findViewById(R.id.music);

        img = findViewById(R.id.imagen);


        cb1.setOnCheckedChangeListener(this);

        cb2.setOnCheckedChangeListener(this);

        cb3.setOnCheckedChangeListener(this);

        cb4.setOnCheckedChangeListener(this);

    }


    @Override

    public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {

        int pattern = (cb1.isChecked() ? 0b0001 : 0)

                | (cb2.isChecked() ? 0b0010 : 0)

                | (cb3.isChecked() ? 0b0100 : 0)

                | (cb4.isChecked() ? 0b1000 : 0);

        switch (pattern) {

            // No selection

            case 0b0000:

                img.setImageResource(R.drawable.def);

                break;

            //Person

            case 0b0001:

                img.setImageResource(R.drawable.wick);

                break;

            //Car

            case 0b0010:

                img.setImageResource(R.drawable.car);

                break;

        }

    }

}


查看完整回答
反对 回复 2023-08-16
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信