如何禁用微调器中的项目

是否有可能显示微调列表中的特定条目为禁用?

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

这是可能的,或者我将不得不重新创build列表每次,而不是无效的条目?

Solutions Collecting From Web of "如何禁用微调器中的项目"

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

有人刚刚发布了一个解决你的问题,参考这个旧post 。

这可能吗

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

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