java - 如何从复选框中获取多个选中的值并防止输出显示两次

标签 java android if-statement android-studio android-checkbox

实际上,我正在尝试创建一个复选框,该复选框将显示基于多个选定成分的匹配食谱。 (有些食谱可能包含相同的成分)但我不知道如何制作 if else 语句。到目前为止,这是显示所选成分的代码,但并不完整。请有人帮我处理 if else 语句。谢谢你。 (我正在使用安卓工作室)

  public class DessertIngAvail extends Dessert {

ArrayList<String> selection = new ArrayList<String>();
TextView final_text;

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

    final_text = (TextView)findViewById(R.id.final_result);
    final_text.setEnabled(false);
}

public void selectItem(View view){
    boolean checked = ((CheckBox) view).isChecked();
    switch (view.getId())
    {
        case R.id.checkBox153:
            if(checked)
            {if(!selection.contains("Bingka Cheese"))
                selection.add("Bingka Cheese");
            }



            break;

        case R.id.checkBox154:
            if(checked)
            {if(!selection.contains("Bingka Cheese"))
                selection.add("Bingka Cheese");

                if(!selection.contains("Steam Shrimp Paste Cake"))
                    selection.add("Steam Shrimp Paste Cake");

                if(!selection.contains("Banana Heart Cake"))
                    selection.add(" Banana Heart Cake");

                if(!selection.contains("Honey Frankincense Cake"))
                    selection.add(" Honey Frankincense Cake");

                if(!selection.contains("Ray Heart Cake"))
                    selection.add("Ray Heart Cake");
            }

            break;

        case R.id.checkBox155:

            if(checked)

            {if(!selection.contains("Bingka Cheese"))
                selection.add("Bingka Cheese");

                if(!selection.contains("Steam Shrimp Paste Cake"))
                    selection.add("Steam Shrimp Paste Cake");

                if(!selection.contains("Banana Heart Cake"))
                    selection.add("Banana Heart Cake");

                if(!selection.contains("Evergreen Cake"))
                    selection.add("Evergreen Cake");

                if(!selection.contains("Moss Cake"))
                    selection.add("Moss Cake");

                if(!selection.contains("Honey Frankincense Cake"))
                    selection.add("Honey Frankincense Cake");

                if(!selection.contains("Ray Heart Cake"))
                    selection.add("Ray Heart Cake");
            }

            break;

        case R.id.checkBox156:
            if(checked)

            {if(!selection.contains("Bingka Cheese"))
                selection.add("Bingka Cheese");}

            break;

        case R.id.checkBox157:

            if(checked)
            {if(!selection.contains("Bingka Cheese"))
                selection.add("Bingka Cheese");
                if(!selection.contains("Steam Shrimp Paste Cake"))
                    selection.add("Steam Shrimp Paste Cake");
                if(!selection.contains("Evergreen Cake"))
                    selection.add("Evergreen Cake");
                if(!selection.contains("Moss Cake"))
                    selection.add("Moss Cake");

            }

            break;



    }
}

public void finalSelection(View view){

    String final_fruit_selection = "";

    for(String Selection : selection)
    {
        final_fruit_selection = final_fruit_selection + Selection + "\n";

    }
    final_text.setText(final_fruit_selection);
    final_text.setEnabled(true);

}

代码的问题是,我无法删除选中成分的第一个输出。所以,当我第二次输入选中的成分时,选中的成分的值只是保持添加而不删除以前的结果。

最佳答案

首先使用Set (HashSet) 避免

if(!selection.contains("Ray Heart Cake")){
    selection.add("Ray Heart Cake");
}

其次,我会做这样的事情。将成分名称设置为 View#setTag()或在 Map<Integer, String>其中 Integer是一个 View id:

public void selectItem(View view){
    Set<String> output = new HashSet(); // here could be ArrayList also OK
    for(CheckBox ch : allMyCheckBoxes){
        if(ch.isChecked()){
            output.add(ch.getTag());
        }
    }
    showOutPut(output);
}

这将使您的代码更具可读性和简单性。

关于java - 如何从复选框中获取多个选中的值并防止输出显示两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37371272/

相关文章:

java - 分析一个已经加载的类

android - 如何在android中的交换机上显示进程状态?

iphone - 检查 NSUserDefaults 中是否存在用户名?

android - 更新 DialogFragment View (并使用 AsyncTask)

c - While 循环条件不满足

c# - If - else 没有 else 的语句

java - Android 编辑文本被截断

Java - 创建动态变量表,我可以轻松回调变量

Java 推断类型和列表 : Working through general Quicksort example

android - 数据库无法连接