【问题标题】:How to Disable the 2nd Spinner Item Which is selected Already in 1st Spinner in Android如何禁用已在 Android 的第一个 Spinner 中选择的第二个 Spinner 项目
【发布时间】:2018-02-16 00:45:54
【问题描述】:

我想转换语言。所以我使用了两个 Spinner,一个是“From Language”,另一个是“To Language”。如果在“从语言”微调器中选择了一种语言,则它不应在第二个微调器中显示(或应禁用)。我怎样才能实现它?

例如。如果我在 1st Spinner 中选择英语,则 2nd Spinner 不应在其下拉列表中显示英语。

【问题讨论】:

    标签: android android-spinner


    【解决方案1】:

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

     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,并找到并删除用户选择的项目,创建一个适配器并绑定数据。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

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

      这是我从另一个链接中找到的关于如何执行此操作的 sn-p,以防您不熟悉

         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返回,不要绘制。

      有很多方法可以做到这一点,只是你想怎么做。祝你好运。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-06
        相关资源
        最近更新 更多