java - 仅在选中时打印多个复选框名称

标签 java android android-studio checkbox switch-statement

我有复选框列表,每次单击显示消息按钮时都想打印它们的名字。该消息显示为 android.widget.Toast。如果选中多个复选框,我想将它们全部打印在一个字符串中。我使用 switch-case 语句来确定单击哪些复选框,并在这种情况下将新名称添加到结果字符串中。

case R.id.cbox_choclate_syrup:
                if (checked)
                    tag = tag + "chocolate syrup ";
                break;

enter image description here

我在这里遇到了问题。结果字符串是在类的开头创建的,在第一次点击按钮后,第二次点击它包含相同的项目名称,即使它们没有被检查。我可以添加更多项目,但结果字符串永远不会重置。

public void tosMessage(String message){
        Context context = getApplicationContext();
        CharSequence msg = message;
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, msg, duration);
        toast.show();
        // resetting the result string.
        tag = "Toppings: ";
    }

如上所示,我尝试在属于按钮的 onClick 方法末尾重置结果字符串。在这种情况下,即使我没有取消选中,之前选中的项目也会在第二次单击时被删除。

public class MainActivity extends AppCompatActivity {

    public static String tag = "Toppings: ";

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

    public void onCheckboxClicked(View view) {

        // is the view now checked.
        boolean checked = ((CheckBox) view).isChecked();

        // check which checkbox is checked?
        switch (view.getId()){
            case R.id.cbox_choclate_syrup:
                if (checked)
                    tag = tag + "chocolate syrup ";
                break;
            case R.id.cbox_sprinkles:
                if (checked)
                    tag = tag + "sprinkles ";
                break;
            case R.id.cbox_crushed_nuts:
                if (checked)
                    tag = tag + "crushed nuts ";
                break;
            case R.id.cbox_cherries:
                if (checked)
                    tag = tag + "cherries ";
                break;
            case R.id.cbox_orio_cookie_crumbles:
                if (checked)
                    tag = tag + "orio cookie crumbles ";
                break;
        }
    }

    public void tosMessage(String message){
        Context context = getApplicationContext();
        CharSequence msg = message;
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, msg, duration);
        toast.show();
        tag = "Toppings: ";
    }

    public void showMsg(View view) {
        tosMessage(tag);
    }
}

我希望每次单击按钮时仅打印且专门检查的项目名称。请帮我找到解决方案。

最佳答案

view.getId() 等于其中一种情况时,该 case 中的语句运行,并且 break 终止整个 switch-case 因此应用程序不会检查其他 CkeckBox。因此,您必须将 switch 语句替换为 if-else-if

int id= view.getId();
if(id == R.id.cbox_choclate_syrup){
    if(checked)
        tag = tag + "chocolate syrup ";
}
else if(id == R.id.cbox_sprinkles){
    if(checked)
        tag = tag + "sprinkles ";
}
else if(id == R.id.cbox_crushed_nuts){
    if(checked)
        tag = tag + "crushed nuts ";
}
else if(id == R.id.cbox_cherries){
    if(checked)
        tag = tag + "cherries ";
}
else if(id == R.id.cbox_orio_cookie_crumbles){
    if(checked)
        tag = tag + "orio cookie crumbles ";
}

注意:删除break语句不起作用。

关于java - 仅在选中时打印多个复选框名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56862886/

相关文章:

java - 一个 'cannot find value' 挡在我和我的第一款游戏之间。 [显示代码]

java - TreeSet<Object> 允许多个相同类型的对象

java - JDBC DriverManager 在尝试连接数据库之前检测用户是否在网络上?

android - 在应用程序退出时取消 AsyncTask SOVLED

java - ImageView 随着 firebase 适配器不断变化

java - Java 进程的 HealthChecker

java - onActivityResult() 未使用两个 fragment 调用

android - 将其与 Firebase 链接后 Flutter 卡住了

Square 的 Okio 库引用中的 Android-Studio-1.2.RC Proguard 警告

java - 将 GCM 添加到项目