2010-08-26 29 views
16

是否可以在Spinner列表中将特定条目显示为禁用?如何禁用Spinner中的项目

也就是说,我想总是显示四个条目(比如说北,南,东和西)的微调,但是我希望能够禁用其中的任何一个,这样就显得灰色并且不可选择。

这是可能的,还是我必须每次都重新创建列表,而忽略无效条目?

+0

([在转项的更改Android文本颜色]的可能重复http://stackoverflow.com/questions/5836254/android-change-text-color-of-items-in-spinner ) – 2014-06-20 03:55:36

+1

@Jason,这是一样的,但我的第一。这不是他的重复吗? – FrinkTheBrave 2014-06-25 07:53:29

+0

重复是谁并不重要,只有重复存在并可以归档。 – Corey 2017-10-24 18:04:27

回答

3

这可能

它不会出现如此。你用ListView这样做的方式涉及到areAllItemsEnabled()isEnabled()。但是,这些是ListAdapter接口上的方法,而不是SpinnerAdapter接口。所以,我怀疑他们会被Spinner忽略。

4

有人刚刚为您的问题发布了解决方案,请参阅old post

+4

尽管这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – 2014-06-20 04:09:24

+0

@AaronHall它是一个链接到堆栈溢出,所以链接将很可能保持可行。 – royhowie 2015-02-17 05:59:58

25
// Create spinner month, and disable month < today 
    List<CharSequence> listMonth = new ArrayList<CharSequence>(); 
    for (int m = 0; m < 12; m++) { 
     if (m < 9) { 
      listMonth.add("0" + (m + 1)); 
     } else { 
      listMonth.add("" + (m + 1)); 
     } 
    } 
     // Create spinner item 
    adapterMonth = new ArrayAdapter<CharSequence>(this, 
      R.layout.layout_spinner_item, listMonth) { 
     // Disable click item < month current 
     @Override 
     public boolean isEnabled(int position) { 
      // TODO Auto-generated method stub 
      if (year <= max_year && position < max_month - 1) { 
       return false; 
      } 
      return true; 
     } 
     // Change color item 
     @Override 
     public View getDropDownView(int position, View convertView, 
       ViewGroup parent) { 
      // TODO Auto-generated method stub 
      View mView = super.getDropDownView(position, convertView, parent); 
      TextView mTextView = (TextView) mView; 
      if (year <= max_year && position < max_month - 1) { 
       mTextView.setTextColor(Color.GRAY); 
      } else { 
       mTextView.setTextColor(Color.BLACK); 
      } 
      return mView; 
     } 
    }; 

    adapterMonth 
      .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spn2.setAdapter(adapterMonth); 
+0

工作就像一个怪异的魅力!谢谢! :) – 2015-12-24 06:18:45

+0

这是正确的,而不是'TextView mTextView =(TextView)mView;' 你必须使用'TextView mTextView =(TextView)mView.findViewById(R.layout.layout_spinner_item);' – 2018-01-10 07:59:05

2
public class MySpinnerAdapter extends BaseAdapter { 

    @Override 
    public void isEnabled(int position) { 
     return getItem(position).isEnabled(); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if(convertView == null) { 
      convertView = View.inflate(parent.getContext(), R.layout.item, null); 
     } 
     if(!isEnabled(position)) { 
      convertView.setEnabled(false); 
      convertView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //NO-OP: Just intercept click on disabled item 
      } 
      }); 
     } 

     return convertView; 
    } 
}