【问题标题】:get selected strings from Multiselection spinner in android从android中的Multiselection微调器中获取选定的字符串
【发布时间】:2020-10-27 06:48:08
【问题描述】:

嗨,在下面的代码中,我实现了多选 spiiner。如果用户单击多选 spiiner,它将打开一个带有复选框和按钮的对话框。如果用户选择了多个复选框,然后单击“确定”按钮,它将用逗号和然后设置为微调器。

现在我的问题是在选择更多文本框时如何获取选定的字符串。我无法获取选定的字符串。

public class MultipleSelectionSpinner extends AppCompatSpinner implements
    DialogInterface.OnMultiChoiceClickListener {



  String[] _items = null;
  boolean[] mSelection = null;
  ArrayAdapter<String> simple_adapter,Allegey_adapter;
  private int sbLength;

  public MultipleSelectionSpinner(Context context) {
    super(context);


    simple_adapter = new ArrayAdapter<String>(context,
        android.R.layout.simple_spinner_dropdown_item);
    super.setAdapter(simple_adapter);

  }

  public MultipleSelectionSpinner(Context context, AttributeSet attrs) {
    super(context, attrs);
    simple_adapter = new ArrayAdapter<String>(context,
        android.R.layout.simple_spinner_dropdown_item);
    super.setAdapter(simple_adapter);

  }



  public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    if (mSelection != null && which < mSelection.length) {
      mSelection[which] = isChecked;
      simple_adapter.clear();
//      Allegey_adapter.clear();
      if (buildSelectedItemString().length() > 0) {

        simple_adapter.add(buildSelectedItemString());
      }  else {
        simple_adapter.add("Pre-Existing Condition");

      }
    } else {
      throw new IllegalArgumentException(
          "Argument 'which' is out of bounds");
    }
  }

  @Override
  public boolean performClick() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
    builder.setMultiChoiceItems(_items, mSelection, this);

    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface arg0, int arg1) {

      }

    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {

      }
    });
        /*if (mSelection.length > 3){
            Toast.makeText(getContext(), "Cannot select more than 3", Toast.LENGTH_SHORT).show();
            return false;
        }*/
    builder.show();
    return true;
  }

  @Override
  public void setAdapter(SpinnerAdapter adapter) {
    throw new RuntimeException(
        "setAdapter is not supported by MultiSelectSpinner.");
  }

  public void setItems(String[] items) {
    _items = items;
    mSelection = new boolean[_items.length];
    simple_adapter.clear();
    simple_adapter.add(_items[0]);
    Arrays.fill(mSelection, false);
  }

  public void setItems(List<String> items) {
    _items = items.toArray(new String[items.size()]);
    mSelection = new boolean[_items.length];
    simple_adapter.clear();

      simple_adapter.add("Pre-Existing Condition");

    ///simple_adapter.add(_items[0]);
    Arrays.fill(mSelection, false);
  }

  public void setSelection(String[] selection) {
    for (String cell : selection) {
      for (int j = 0; j < _items.length; ++j) {
        if (_items[j].equals(cell)) {
          mSelection[j] = true;
        }
      }
    }
  }

  public void setSelection(List<String> selection) {
    for (int i = 0; i < mSelection.length; i++) {
      mSelection[i] = false;
    }
    for (String sel : selection) {
      for (int j = 0; j < _items.length; ++j) {
        if (_items[j].equals(sel)) {
          mSelection[j] = true;
        }
      }
    }
    simple_adapter.clear();
    simple_adapter.add(buildSelectedItemString());
  }

  public void setSelection(int index) {
    for (int i = 0; i < mSelection.length; i++) {
      mSelection[i] = false;
    }
    if (index >= 0 && index < mSelection.length) {
      mSelection[index] = true;
    } else {
      throw new IllegalArgumentException("Index " + index
          + " is out of bounds.");
    }
    simple_adapter.clear();
    simple_adapter.add(buildSelectedItemString());
        /*if (sbLength>0){
            Toast.makeText(getContext(), "Length greater than zero", Toast.LENGTH_SHORT).show();
            simple_adapter.add(buildSelectedItemString());
        }else{
            Toast.makeText(getContext(), "Length shorter", Toast.LENGTH_SHORT).show();
            simple_adapter.add("Tap to select");
        }*/
  }

  public void setSelection(int[] selectedIndicies) {
    for (int i = 0; i < mSelection.length; i++) {
      mSelection[i] = false;
    }
    for (int index : selectedIndicies) {
      if (index >= 0 && index < mSelection.length) {
        mSelection[index] = true;
      } else {
        throw new IllegalArgumentException("Index " + index
            + " is out of bounds.");
      }
    }
    simple_adapter.clear();
    simple_adapter.add(buildSelectedItemString());
  }

  public List<String> getSelectedStrings() {
    List<String> selection = new LinkedList<String>();
    for (int i = 0; i < _items.length; ++i) {
      if (mSelection[i]) {
        selection.add(_items[i]);
      }
    }
    return selection;
  }

  public List<Integer> getSelectedIndicies() {
    List<Integer> selection = new LinkedList<Integer>();
    for (int i = 0; i < _items.length; ++i) {
      if (mSelection[i]) {
        selection.add(i);
      }
    }
    return selection;
  }

  private String buildSelectedItemString() {
    StringBuilder sb = new StringBuilder();
    boolean foundOne = false;

    for (int i = 0; i < _items.length; ++i) {
      if (mSelection[i]) {

        if (foundOne) {
          sb.append(", ");
        }
        foundOne = true;

        sb.append(_items[i]);
      }
    }

    //Log.e("sb length",""+sb.length());
    sbLength = sb.length();
    return sb.toString();
  }

  public String getSelectedItemsAsString() {
    StringBuilder sb = new StringBuilder();
    boolean foundOne = false;

    for (int i = 0; i < _items.length; ++i) {
      if (mSelection[i]) {
        if (foundOne) {
          sb.append(", ");
        }
        foundOne = true;
        sb.append(_items[i]);
      }
    }
    return sb.toString();
  }
}

java:

pre_existing_condition.setItems(Pre_Conditions);

【问题讨论】:

    标签: android multi-select


    【解决方案1】:

    初始化 ArrayList 并在复选框的点击监听器中,将字符串添加到数组中,如下所示:

        final ArrayList<String> myArrayList = new ArrayList<>();
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton myCheckBox, boolean checked) {
            if (checked) {
                myArrayList.add(myCheckBox.getText().toString());
            } else {
                myArrayList.remove(myCheckBox.getText().toString());
            }
            }
        });
    

    然后当用户单击您想要的按钮时,您可以循环填充数组并制作一个逗号分隔的字符串,如下所示:

        String myString = "";
        for (int i = 0; i < myArrayList.size(); i++) {
            myString+= myArrayList.get(i) + ",";
        }
    

    【讨论】:

    • 用 Kotlin 回答 Java 问题可能不是最好的主意
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多