[英]How to Disable the 2nd Spinner Item Which is selected Already in 1st Spinner in Android
I want to Convert the Languages. 我想转换语言。 So i am using two Spinners one is "From Language" and Another one is for "To Language".
所以我正在使用两个微调器,一个是“来自语言”,另一个是用于“到语言”。 If One Language is Selected in "From Language" Spinner, it shouldn't display (or it should be disabled) in 2nd spinner.
如果在“From Language”Spinner中选择了一种语言,则不应在第二个微调器中显示(或应该禁用)。 how can i achieve it?
我怎么能实现它?
Ex. 防爆。 if i Select English in 1st Spinner, 2nd Spinner Shouldn't display English in its dropdown.
如果我在1st Spinner中选择英语,则第二个Spinner不应在其下拉菜单中显示英语。
This is may not be the best way try this. 这可能不是尝试此操作的最佳方法。
ArrayList<String> languages = new ArrayList<>();
languages.add("English");
languages.add("Hindi");
languages.add("Telugu");
languages.add("Tamil");
languages.add("Kannada");
languages.add("Malayalam");
// make a array list of languages
String option1 = null;
Spinner spinnerOption1 = (Spinner) findViewById(R.id.spinner1);
final ArrayAdapter<String> adapterOpton1 = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, languages);
spinnerOption1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerOption1.setAdapter(adapterOpton1);
spinnerOption1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
option1 = adapterOpton1.getItem(position);
}
});
int selectedIndex;
for (String item : languages) {
if (item.equals(option1)) {
selectedIndex == languages.indexOf(item);
}
}
ArrayList<String> languages2 = languages;
languages2.remove(selectedIndex);
Spinner spinnerOption2 = (Spinner) findViewById(R.id.spinner2);
final ArrayAdapter<String> adapterOption2 = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, languages2);
spinnerOption2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerOption2.setAdapter(adapterOption2);
Explanation: lets create a arraylist with languages bind it to the adapter on the spinner, on selection to the spinner one keep a track of that selection, then find the index of the selection in the arraylist. 解释:让我们创建一个带有语言的arraylist将它绑定到微调器上的适配器,在选择spinner时跟踪该选择,然后在arraylist中找到选择的索引。 create second arraylist with the same languages and find and remove the user selected item, create an adapter and bind the data.
使用相同的语言创建第二个arraylist,找到并删除用户选择的项目,创建适配器并绑定数据。
Hope it helps. 希望能帮助到你。
Use Hashmaps it will be easier. 使用Hashmaps会更容易。 Create an Adapter that uses Key Values for populating adapter.
创建一个使用键值填充适配器的适配器。
This is a snippet I found from another link on how to do that, in case you are not familiar 这是我从另一个链接中找到的片段,如果你不熟悉的话
public class HashMapAdapter extends BaseAdapter {
private HashMap<String, String> mData = new HashMap<String, String>();
private String[] mKeys;
public HashMapAdapter(HashMap<String, String> data){
mData = data;
mKeys = mData.keySet().toArray(new String[data.size()]);
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(mKeys[position]);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
String key = mKeys[pos];
String Value = getItem(pos).toString();
//do your view stuff here
return convertView;
}
}
Credit What adapter shall I use to use HashMap in a ListView Credit 我应该使用什么适配器在ListView中使用HashMap
Now for your management of the adapters. 现在,您可以管理适配器。
LanguageOneMap.put (all your keys 0-whatever) value (english-whatever)
LanguageTwoMap.put (same as above)
LanguageAllMap.put (same as above)
Adapter 1 selects Language Callback(languageSelectedFromOneKey){
LanguageTwoMap.clearAll
LanguageTwoMap.put (all again)
LanguageTwoMap.remove(languageSelectedFromOneKey)
LanguageTwoAdapter.notifyDataSetChanged()
}
The above is just pseudo code meant to give the idea, not exact copy and paste. 以上只是伪代码,旨在提供想法,而不是精确的复制和粘贴。 Hope that is enough to get you going.
希望这足以让你前进。 There are many ways to skin this cat, you could even use the same list for both adapters.
有很多方法可以为这只猫蒙皮,甚至可以为两个适配器使用相同的列表。 Then when one is selected from one or the other, set a property of "selectedOtherLanguage" in the opposite adapter, then in the GetView method if data.get(pos) == selectedFromOtherListItem return, don't draw.
然后,从一个或另一个中选择一个时,在相对的适配器中设置“ selectedOtherLanguage”属性,然后在getView方法中,如果data.get(pos)== selectedFromOtherListItem返回,则不绘制。
Many ways to do this, just a matter of how you want to do it. 有很多方法可以做到这一点,只需要你想做什么。 Goodluck.
祝好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.