【问题标题】:how to store selected checkbox values in ArrayList如何在ArrayList中存储选定的复选框值
【发布时间】:2018-02-06 18:32:40
【问题描述】:

我想将选定的checkbox 值存储在ArrayList 中。有五个checkbox,如果我选择三个,那么它们将存储在ArrayList。我用String []ad = new String[5];是不是写上不存储checkbox的值

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
List<String> mList = new ArrayList<>();
CheckBox android, java, python, php, unity3D;
Button submitButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    android = (CheckBox) findViewById(R.id.androidCheckBox);
    android.setOnClickListener(this);
    java = (CheckBox) findViewById(R.id.javaCheckBox);
    java.setOnClickListener(this);
    python = (CheckBox) findViewById(R.id.pythonCheckBox);
    python.setOnClickListener(this);
    php = (CheckBox) findViewById(R.id.phpCheckBox);
    php.setOnClickListener(this);
    unity3D = (CheckBox) findViewById(R.id.unityCheckBox);
    unity3D.setOnClickListener(this);

    submitButton = (Button) findViewById(R.id.submitButton);
    submitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.e("ArrayList Values*******",mList.toString());
        }
    });

}

@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.androidCheckBox:
            if (android.isChecked()) {
                mList.add(String.valueOf(android.getText()));
                Log.e("Android*******",mList.toString());
            }
            break;

        case R.id.javaCheckBox:
            if (java.isChecked()) {
                mList.add(String.valueOf(java.getText()));
                Log.e("Java*******",mList.toString());
            }
            break;

        case R.id.phpCheckBox:
            if (php.isChecked()) {
                mList.add(String.valueOf(php.getText()));
                Log.e("PHP*******",mList.toString());
            }
            break;

        case R.id.pythonCheckBox:
            if (python.isChecked()){
                mList.add(String.valueOf(python.getText()));
                Log.e("Python*******",mList.toString());
            }
            break;

        case R.id.unityCheckBox:
            if (unity3D.isChecked()){
                mList.add(String.valueOf(unity3D.getText()));
                Log.e("Unity*******",mList.toString());
            }
            break;
      }
    }
  }

【问题讨论】:

    标签: java android arraylist checkbox


    【解决方案1】:

    不,这不太正确。

    我强烈建议在用户按下submitButton 时创建数组。否则,如果他们选中了某些框,并且

    1. 旋转屏幕,或
    2. 将应用程序置于后台,Activity 被系统销毁(您可以通过在开发人员选项中选择“不保留活动”选项来模拟这种情况)

    当他们再次看到您的 UI 时,它将正确地重新创建 - 用户选中的所有框仍将被选中,但您的数组将为空!我推荐类似的东西

    submitButton = (Button) findViewById(R.id.submitButton);
    submitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String []ad = new String[5];
            if (android.isChecked()) {
                ad[0] = (String) android.getText();                
            }
            if (java.isChecked()) {
                ad[1] = (String) java.getText();                
            }
            ...
        }
    });
    

    如果您在提交用户选择的上下文之外关心ad,最佳做法是将其保存在Bundle 中的public void onSaveInstanceState(Bundle outState) {} 并在您的onCreate(Bundle savedInstanceState){} 中获取并设置它。这样,即使在方向更改或系统破坏您的活动时,您也不会丢失数据。有关如何执行此操作的详细信息,请参阅this answer

    【讨论】:

    • 当用户点击按钮时,您的阵列将被重置,因此您将丢失之前存储的数据...
    • 它不会,因为状态存储在 UI 本身中。每当用户单击sumbitButton 时,代码都会检查每个复选框的状态并根据当前状态创建数组。我建议您不再在 switch 语句中向数组写入任何内容,而仅在 submitButton 点击侦听器中写入任何内容。
    • 这样做:String []ad = new String[5];在 onClick 回调中,您创建一个新的数组实例...
    • 取决于提问者想要对数组做什么 - 问题没有指定这一点。我假设该数组除了提交代码之外没有任何实用程序。否则,它需要在点击侦听器之外创建,并使用Activity.onSaveInstanceState 持久化 - 但是,问题没有提及是否有必要。
    • 您的代码不处理旋转或生命周期事件。
    【解决方案2】:

    只需创建一个List 并在触发点击事件时添加值:

    final List<String> mList = new ArrayList<>();
    mList.add("Your value");
    

    注意:考虑实现onCheckChangeListener 而不是onClickListener 来处理您的复选框选择事件。

    【讨论】:

    • 我们可以使用 ArrayList 但我是 android 新手,所以你能告诉我如何添加 ArrayList。
    • 我已经完成了,请检查我编辑的代码。现在我需要当有人取消选中时,复选框的值将从 ArrayList 中删除
    猜你喜欢
    • 2017-04-28
    • 2018-08-30
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2018-09-03
    • 2017-03-17
    相关资源
    最近更新 更多