简体   繁体   English

如何禁用已在Android中的第一个Spinner中选择的第二个微调器项目

[英]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.

相关问题 如何填充基于第一旋转器的第二旋转器和基于第二旋转器的第三旋转器? - How to populate 2nd spinner based on 1st spinner and 3rd spinner based on 2nd spinner? 如何根据我的1st Spinner选择来选择2nd Spinner? - How to do 2nd Spinner get selected , based on my 1st Spinner selection? 在更改第一微调器值时更改第二微调器值 - changing 2nd spinner values on changing 1st spinner value 由 1st Spinner 创建的 2nd Spinner 应更新 textview - 2nd Spinner which was created by 1st Spinner, should update textview 当我在第一个微调器中再次选择一个项目时发生错误,然后在第二个微调器中未解析相关数据意味着它没有刷新 - error occur when i select an item again in 1st spinner then the related data do not parsed in 2nd spinner means it does'nt refresh 更改 Android Spinner 第一项背景颜色 - Change Android Spinner 1st item background color 默认情况下如何在微调框中选择第二个选项? - How to have the 2nd option in a Spinner selected by default? 禁用第二个微调器,直到第一个微调器获得其值:android - disable second spinner click till 1st spinner get its value : android Android Spinner 所选项目 - Android Spinner Selected Item 微调器onItemSelected已选择项目 - Spinner onItemSelected with item already selected
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM