多选微调器OnItemSelectedListener在android中不起作用

问题描述

在下面的代码中,您好我想在选中复选框的情况下实现Multiselection旋转器OnitemclickListner。在onclick之后将其设置为Multiselection旋转器。在获取所选项目时,它不起作用。

有人可以帮助我吗

multiselection spinner.onclick:

allergies.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                            @Override
                            public void onItemSelected(AdapterView<?> parent,View view,int position,long id) {
                                selected = allergies.getSelectedStrings();
                                Log.d("selected",String.valueOf(selected));
                            }
                            @Override
                            public void onNothingSelected(AdapterView<?> parent) {
                            }
                        });

MultipleSelectionSpinner.java:

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();
  }

  private boolean isAnySelect() {
    for (boolean b : mSelection) {
      if (b == true) return true;
    }
    return false;
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...