猿问

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

这是我在这里发表的第一篇文章,所以它可能做得不太好...我是一名软件开发学生,现在我正在学习 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 来做到这一点,但我个人对我在帖子中读到的方式感兴趣哈哈哈。


拉风的咖菲猫
浏览 96回答 1
1回答

Qyouu

您需要将侦听器附加到复选框并将该模式检查移至方法内部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;        }    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答