2010-08-26 16 views
16

क्या स्पिनर सूची में विशेष प्रविष्टियों को अक्षम के रूप में प्रदर्शित करना संभव है?स्पिनर में किसी आइटम को अक्षम कैसे करें

आईई, मैं हमेशा चार प्रविष्टियों (उत्तर, दक्षिण, पूर्व और पश्चिम, कहते हैं) के साथ एक स्पिनर प्रदर्शित करना चाहता हूं, लेकिन मैं इनमें से किसी एक को अक्षम करने में सक्षम होना चाहता हूं ताकि ऐसा लगता है कि बाहर निकलता है और चयन योग्य नहीं है ।

क्या यह संभव है, या क्या मुझे अवैध प्रविष्टियों को छोड़कर प्रत्येक बार सूची को फिर से बनाना होगा?

+0

([स्पिनर में आइटम की एंड्रॉयड परिवर्तन पाठ रंग] के संभावित डुप्लिकेट http://stackoverflow.com/questions/5836254/android-change-text-color-of-items-in-spinner) –

+1

@ जेसन, यह वही है, लेकिन मेरा पहला यहां था। क्या वह उसे डुप्लिकेट नहीं बनाता है? – FrinkTheBrave

+0

इससे कोई फ़र्क नहीं पड़ता कि कौन डुप्लिकेट था, केवल वह डुप्लिकेट मौजूद है और इस तरह संग्रहीत किया जा सकता है। – Corey

उत्तर

3

यह संभव

यह इतना प्रकट नहीं होता है। ListView के साथ आप ऐसा करेंगे areAllItemsEnabled() और isEnabled() शामिल हैं। हालांकि, वे ListAdapter इंटरफ़ेस पर विधियां हैं, SpinnerAdapter इंटरफ़ेस नहीं। इसलिए, मुझे संदेह है कि उन्हें Spinner द्वारा अनदेखा कर दिया जाएगा।

4

किसी ने अभी आपकी समस्या का समाधान पोस्ट किया है, इस old post देखें।

+4

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। –

+0

@AaronHall यह ओवरफ़्लो ढेर करने का एक लिंक है, इसलिए लिंक संभवतः व्यवहार्य रहेगा। – 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

एक freakkiiiing आकर्षण की तरह काम किया! धन्यवाद! :) –

+0

यह सही है लेकिन 'TextView mTextView = (TextView) mView;' के बजाय आपको 'टेक्स्ट व्यू 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; 
    } 
} 
संबंधित मुद्दे