【问题标题】:how to not show item for selection by other spinner, if it has already been selected by another spinner如果已被另一个微调器选择,如何不显示项目以供其他微调器选择
【发布时间】:2018-06-01 06:59:48
【问题描述】:

我正在创建一个包含 TextView 和 Spinner 的动态视图。我有一组必须在微调器中显示的项目。现在,例如, SpinnerA 显示列表中的 item1,因此我不希望 SpinnerB 显示 item1 以供选择。同样,如果 SpinnerB 选择了 item3,则 SpinnerA 不应显示 item3 进行选择。 最后,我想要的准确而简洁的是,一个微调器已经选择的项目不应该被任何其他微调器选择。

编辑:我收到一个包含产品数量的 JSON 响应。在此基础上,我将创建包含微调器的动态视图并将产品的值自动填充到微调器中。同样在单击添加更多按钮时,我将通过添加更多动态视图来获得便利。所以现在的情况是一个微调器中的预选值应该在任何其他微调器中都可见以供选择。我在下面提到了我的布局的图像 URL。the layout link 请帮我解释一下逻辑。

【问题讨论】:

标签: java android android-spinner


【解决方案1】:

我假设单个微调器有单个侦听器,如果不是,您必须再添加一个 swich

    @Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    if(spinnerTextFromFirst ==String.valueOf(parent.getItemAtPosition(position));

}

如果你现在只想显示这些项目 您需要添加整数列表并重新加载具有更多条件的适配器

        for (int j = 0; j < listFromAdapter.length - 1; j++) {
        for (int i = 0; i < list.length - 1l i++){
            if (list[i])!=j){
                addToNewListWhichWillBeYourAdapter();
            }
        }
    }

【讨论】:

  • 您好,感谢您的回复,但我将根据我的 json 响应创建微调器,范围从 0 到 20 个微调器,所以在这种情况下,我将如何检查值
【解决方案2】:

最简单的方法是在选择 spinnerA 项目时刷新 spinnerB 中的项目。

final List<String> items = new ArrayList<String>();
items.add("one");
items.add("two");
items.add("three");

final List<String> itemsB = new ArrayList<String>(items);
final List<String> itemsA = new ArrayList<String>(items);

ArrayAdapter<String> adapterA = new ArrayAdapter<String>(this,
     android.R.layout.simple_spinner_item, itemsA);

ArrayAdapter<String> adapterA = new ArrayAdapter<String>(this,
     android.R.layout.simple_spinner_item, itemsB);

boolean isFirstCallSpinnerA = true;
boolean isFirstCallSpinnerB = true;

spinnerA.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
      // onItemSelected is always called when OnItemSelectedListener created.
      // so, ignore first call.
      if(isFirstCallSpinnerA) {
        isFirstCallSpinnerA = false;
        return;
      }

      // clear spinner items b
      // then add again
      itemsB.clear();
      itemsB.addAll(items); 
      itemsB.remove(position);
      adapterB.notifyDataSetChanged();
    } 

    public void onNothingSelected(AdapterView<?> adapterView) {
        return;
    } 
}); 

spinnerB.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
      if(isFirstCallSpinnerB) {
        isFirstCallSpinnerB = false;
        return;
      }

      // clear spinner items A
      // then add again
      itemsA.clear();
      itemsA.addAll(items); 
      itemsA.remove(position);
      adapterA.notifyDataSetChanged();
    } 

    public void onNothingSelected(AdapterView<?> adapterView) {
        return;
    } 
}); 

我无法确认上述代码是否有效。您还需要暂时保留 spinnerA 和 spinnerB 的选定项目,以防您想要保留选定的项目。

【讨论】:

  • 嗨,感谢您的回复,但我的疑问是:我正在根据 json 响应生成动态视图,因此可以生成从 0 到 20 的微调器数量
猜你喜欢
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多