2010-08-26 9 views
16

Czy możliwe jest wyświetlanie poszczególnych wpisów na liście Spinner jako wyłączone?Jak wyłączyć element Spinnera

Tj. Chcę zawsze wyświetlać spinner z czterema wpisami (na przykład Północ, Południe, Wschód i Zachód), ale chcę mieć możliwość wyłączenia dowolnego z nich, aby był wyszarzony i nie można go było wybrać .

Czy to możliwe, czy też będę musiał ponownie utworzyć listę za każdym razem, pomijając nieprawidłowe wpisy?

+0

możliwe duplikat [android zmiana koloru tekstu elementów w pokrętła] (http://stackoverflow.com/questions/5836254/android-change-text-color-of-items-in-spinner) –

+1

@Jason, jest taki sam, ale mój był tutaj pierwszy. Czy to nie jest jego duplikat? – FrinkTheBrave

+0

Nie ma znaczenia, kto był duplikatem, tylko że duplikaty istnieją i mogą być archiwizowane jako takie. – Corey

Odpowiedz

3

Czy to możliwe

Nie wydaje się więc. Sposób, w jaki zrobiłbyś to z ListView, obejmuje areAllItemsEnabled() i isEnabled(). Są to jednak metody na interfejsie ListAdapter, a nie na interfejsie SpinnerAdapter. Podejrzewam, że zostaną zignorowane przez Spinner.

4

Ktoś właśnie wysłał rozwiązanie Twojego problemu, zapoznaj się z tym old post.

+4

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać odnośnik. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. –

+0

@AaronHall to link do przepełnienia stosu, więc link najprawdopodobniej pozostanie wykonalny. – royhowie

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

Pracował jak dziwaczny urok! Dziękuję Ci! :) –

+0

To prawda, ale zamiast "TextView mTextView = (TextView) mView;' musisz użyć 'TextView mTextView = (TextView) mView.findViewById (R.layout.layout_spinner_item);' –

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