2010-08-26 31 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; 
    } 
}