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

时间:2016-03-18 16:45:53

标签: android android-spinner

我想转换语言。所以我使用的是两个Spinners,其中一个是"来自Language"另一个用于语言"。如果在"从语言中选择一种语言" Spinner,它不应该在第二个微调器中显示(或者应该被禁用)。我怎么能实现它?

实施例。如果我在1st Spinner中选择英语,则第二个Spinner不应该在其下拉列表中显示英语。

2 个答案:

答案 0 :(得分:0)

这可能不是试试这个的最好方法。

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

说明: 让我们用语言创建一个arraylist 将它绑定到微调器上的适配器,在选择微调器时,保持对该选择的跟踪,然后在arraylist中找到选择的索引。 使用相同的语言创建第二个arraylist,找到并删除用户选择的项目,创建适配器并绑定数据。

希望它有所帮助。

答案 1 :(得分:0)

使用Hashmaps会更容易。创建一个使用键值填充适配器的适配器。

这是我从其他链接中找到的一个片段,如果您不熟悉,

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

信用What adapter shall I use to use HashMap in a ListView

现在管理适配器。

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

以上只是伪代码,用于提供想法,而不是精确的复制和粘贴。希望这足以让你前进。有很多方法可以为这只猫提供皮肤,你甚至可以为两个适配器使用相同的列表。然后当从一个或另一个中选择一个时,在相对的适配器中设置“selectedOtherLanguage”的属性,然后在GetView方法中,如果data.get(pos)== selectedFromOtherListItem返回,则不绘制。

许多方法可以做到这一点,只需要你想做什么。古德勒克。