如果其他微调器已经选择了项目,如何不显示供其他微调器选择的项目
how to not show item for selection by other spinner, if it has already been selected by another spinner
我正在创建一个包含 TextView 和 Spinner 的动态视图。我有一系列必须在微调器中显示的项目。现在,例如,SpinnerA 显示列表中的 item1,因此我不希望 SpinnerB 显示 item1 以进行选择。同样,如果 SpinnerB 选择了 item3,则 SpinnerA 不应显示 item3 作为选择。
最后,准确而简洁地我想要的是,一个微调器已经选择的项目不应该被任何其他微调器选择可见。
编辑:我收到 JSON 回复,其中包含产品数量。在此基础上,我将创建包含微调器的动态视图并将产品的值自动填充到微调器中。同样在点击添加更多按钮时,我将通过添加更多动态视图来获得便利。所以现在的情况是一个微调器中的预选值应该在任何其他微调器中可见以供选择。我在下面提到了我的布局的图像 URL。the layout link
请帮我理一下逻辑。
我假设单个微调器只有一个侦听器,否则你必须再添加一个开关
@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();
}
}
}
最简单的方法是在选择 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 的所选项目,以防您想要保留所选项目。
我正在创建一个包含 TextView 和 Spinner 的动态视图。我有一系列必须在微调器中显示的项目。现在,例如,SpinnerA 显示列表中的 item1,因此我不希望 SpinnerB 显示 item1 以进行选择。同样,如果 SpinnerB 选择了 item3,则 SpinnerA 不应显示 item3 作为选择。 最后,准确而简洁地我想要的是,一个微调器已经选择的项目不应该被任何其他微调器选择可见。
编辑:我收到 JSON 回复,其中包含产品数量。在此基础上,我将创建包含微调器的动态视图并将产品的值自动填充到微调器中。同样在点击添加更多按钮时,我将通过添加更多动态视图来获得便利。所以现在的情况是一个微调器中的预选值应该在任何其他微调器中可见以供选择。我在下面提到了我的布局的图像 URL。the layout link 请帮我理一下逻辑。
我假设单个微调器只有一个侦听器,否则你必须再添加一个开关
@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();
}
}
}
最简单的方法是在选择 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 的所选项目,以防您想要保留所选项目。