如何在ArrayList中存储选定的复选框值

时间:2017-08-29 10:29:46

标签: java android arraylist checkbox

我想在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;
      }
    }
  }

2 个答案:

答案 0 :(得分:1)

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

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

注意:考虑实施onCheckChangeListener intead onClickListener来处理您的复选框选择事件。

答案 1 :(得分:0)

不,这不太正确。

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

  1. 旋转屏幕,或
  2. 将应用程序置于后台,系统会销毁活动(您可以通过选择&#34;不要在开发者选项中保留活动&#34;选项来模拟此活动)
  3. 当他们再次看到你的用户界面时,它会被正确地重新创建 - 用户选中的所有方框仍然会被检查,但你的数组将是空的!我建议像

    这样的东西
    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