填充微调器

Populate Spinner

我有4个复选框,当我勾选一个,两个或更多。我想用值填充微调器,如果选中复选框 1,则为 1-5,如果选中复选框 2,则为 6-10,等等。我这里有这个逻辑。

public void populateSpinnerToothNumber() {
    if (cbQuadrant1.isChecked()) {
        ArrayList<String> toothNumber = new ArrayList<>();
        toothNumber.add("1");
        toothNumber.add("2");
        toothNumber.add("3");
        toothNumber.add("4");
        toothNumber.add("5");

        ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber);
        spinnerToothNumber.setAdapter(stringArrayAdapter);
    } else if (cbQuadrant2.isChecked()) {

    } else if (cbQuadrant3.isChecked()) {

    } else if (cbQuadrant4.isChecked()) {

    } else if (cbQuadrant1.isChecked() && cbQuadrant2.isChecked()) {
        ArrayList<String> toothNumber = new ArrayList<>();
        toothNumber.add("1");
        toothNumber.add("2");
        toothNumber.add("3");
        toothNumber.add("4");
        toothNumber.add("5");
        toothNumber.add("6");
        toothNumber.add("7");
        toothNumber.add("8");
        toothNumber.add("9");
        toothNumber.add("10");

        ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber);
        spinnerToothNumber.setAdapter(stringArrayAdapter);
    }
}

如何改进逻辑?

更新

public void populateSpinnerToothNumber() {
    final ArrayList<String> toothNumber = new ArrayList<>();

    cbQuadrant1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            for (int x = 1; x <= 5; x++) {
                toothNumber.add(String.valueOf(x));
            }
        }
    });

    cbQuadrant2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            for (int x = 6; x <= 10; x++) {
                toothNumber.add(String.valueOf(x));
            }
        }
    });

    cbQuadrant3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            for (int x = 11; x <= 15; x++) {
                toothNumber.add(String.valueOf(x));
            }
        }
    });

    cbQuadrant4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            for (int x = 16; x <= 20; x++) {
                toothNumber.add(String.valueOf(x));
            }
        }
    });

    ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber);
    spinnerToothNumber.setAdapter(stringArrayAdapter);
}

这解决了问题 :) 用 checkbox.setOnCheckedChangeListener 管理它 感谢您的帮助! :)

你应该使用OnCheckedChangeListener

Interface definition for a callback to be invoked when the checked state of a compound button changed.

示例代码

 checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

      @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
           if (isChecked) {
               ArrayList<String> toothNumber = new ArrayList<>();
               toothNumber.add("1");
               toothNumber.add("2");
               toothNumber.add("3");
               toothNumber.add("4");
               toothNumber.add("5");
               ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber);
               spinnerToothNumber.setAdapter(stringArrayAdapter);
            }
          }
        }
    );

    checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

          @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
           if (isChecked) {
                ArrayList<String> toothNumber = new ArrayList<>();
                toothNumber.add("1");
                toothNumber.add("2");
                toothNumber.add("3");
                toothNumber.add("4");
                toothNumber.add("5");
                toothNumber.add("6");
                toothNumber.add("7");
                toothNumber.add("8");
                toothNumber.add("9");
                toothNumber.add("10");
                ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber);
                  spinnerToothNumber.setAdapter(stringArrayAdapter);
                                                }
                                            }
                                        }
    );

添加到@Nilesh Rathod。您可以使用一种名为 populateSpinner (int bgCount, int Endcount) 的方法,它获取从开始范围到结束所需的齿数。

private void populateSpinner (int bgCount, int Endcount) {
    ArrayList<String> toothNumber = new ArrayList<>();
    for (int i = bgCount; i < Endcount; i++) {
          toothNumber.add(i);
     }
    ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber);
    spinnerToothNumber.setAdapter(stringArrayAdapter);
}

在您的复选框 OnCheckedChangeListener 中调用这样的方法。 populateSpinner (1, 5);