如何在Java中对多个组合使用打开复选框?
这是我在这里的第一篇文章,所以可能做得不太好。。。 我是一名软件开发专业的学生,现在我正在学习Android应用程序开发 我被要求制作一个带有4个复选框的程序,所以当我选中其中任何一个复选框时,应用程序会显示一张特定的图片。比如说 复选框1:个人 复选框2:汽车 复选框3:街道 复选框4:音乐 如果我检查了1(人)和2(车),它应该显示一个人和一辆车在同一张图片。。。我在研究这个,我发现了这个。我认为这是一个制作这个程序的好方法,但我不知道如何让它正常工作。我试着这样做: MainActivity.Java:如何在Java中对多个组合使用打开复选框?,java,android,switch-statement,android-checkbox,Java,Android,Switch Statement,Android Checkbox,这是我在这里的第一篇文章,所以可能做得不太好。。。 我是一名软件开发专业的学生,现在我正在学习Android应用程序开发 我被要求制作一个带有4个复选框的程序,所以当我选中其中任何一个复选框时,应用程序会显示一张特定的图片。比如说 复选框1:个人 复选框2:汽车 复选框3:街道 复选框4:音乐 如果我检查了1(人)和2(车),它应该显示一个人和一辆车在同一张图片。。。我在研究这个,我发现了这个。我认为这是一个制作这个程序的好方法,但我不知道如何让它正常工作。我试着这样做: MainActivit
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;
}
}
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/rl">
<CheckBox
android:id="@+id/persona"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/persona"
android:layout_marginTop="25dp"
android:checked="false"
android:textSize="30sp"
/>
<CheckBox
android:id="@+id/car"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/car"
android:layout_below="@id/persona"
android:checked="false"
android:textSize="30sp"
/>
<CheckBox
android:id="@+id/calle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/calle"
android:layout_below="@id/car"
android:checked="false"
android:textSize="30sp"
/>
<CheckBox
android:id="@+id/music"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/music"
android:layout_below="@id/calle"
android:checked="false"
android:textSize="30sp"
/>
<ImageView
android:id="@+id/imagen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/music"
android:layout_centerHorizontal="true"
android:contentDescription="@string/imagen" />
</RelativeLayout>
但当我运行应用程序时,它只显示默认图像(似乎只有案例0b0000起作用?),即使我在xml中选中了特定的复选框check=“true”。。。我还尝试为每个复选框创建一个onClick事件,但似乎我没有正确使用模式变量
如果我能得到帮助,我将非常感激。。。我想我可以使用Ifs,但我个人对我在博文中读到的这种方式很感兴趣。您需要将侦听器附加到您的复选框,并将模式检查移动到
onCheckedChanged()
方法中。通过这种方式,您的复选框可以通知活动并重新计算模式的值:
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;
}
}
}
您需要将侦听器附加到复选框,并将该模式检查移动到onCheckedChanged()
方法中。通过这种方式,您的复选框可以通知活动并重新计算模式的值:
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;
}
}
}
嗨,谢谢你的回答。我尝试了你的方法,现在它似乎对任何复选框都有响应,但它只会使ImageView显示默认图像(就像它将任何复选框的更改作为0b0000?)。所以它不会显示正确的图像。它应该只响应哪些复选框?它应该响应所有复选框(4),所以当我按某个组合时,它会显示我设置的图片。例如,根据我以这种方式获得的帖子,如果我选择复选框1和2,则图案应等于0b0011,并显示我在这种情况下设置的图片。我更新了代码。问题是,您应该使用isChecked()
而不是isSelected()
Hi,谢谢您的回答。我尝试了你的方法,现在它似乎对任何复选框都有响应,但它只会使ImageView显示默认图像(就像它将任何复选框的更改作为0b0000?)。所以它不会显示正确的图像。它应该只响应哪些复选框?它应该响应所有复选框(4),所以当我按某个组合时,它会显示我设置的图片。例如,根据我以这种方式获得的帖子,如果我选择复选框1和2,则图案应等于0b0011,并显示我在这种情况下设置的图片。我更新了代码。问题是,您应该使用isChecked()