SORU
25 Mart 2012, Pazar


Nasıl bir Android Spinner bir öğeyi gizlemek için

Bir Android spinner bir widget bir öğeyi gizlemek için arıyorum. Bu izin simüle etmek için bir çevirici ile hiçbir öğe seçili, ve sağlayan onİtemSelected() geri çağrılan her öğe seçili (gizli madde "geçerli"). Normalde her zaman bir geri arama, geçerli yani oluşturmak değildir spinner bir kalemi vardır.

(Gri) öğeleri devre dışı bırakma, ama eğer yok ise yok gibi öğeleri tamamen gizlemek için stackoverflow üzerinde bazı kodlar var.

Birçok denemeden sonra eski ve yeni çeşitli Android platformları üzerinde çalışır hack-ish biraz bir çözüm buldum. Dikkat edin zor durumda olan ufak tefek bazı sakıncaları vardır. Hala daha resmi bir çözüm, başka duymak istiyorum "bir çevirici ile bunu yapma".

Bu her zaman spinner ilk öğeyi gizler, ama kolayca keyfi bir öğe veya birden fazla öğe saklamak için genişletilmiş olabilir oldukça. Spinner öğelerin listesinin başında kukla bir öğe boş bir dize içeren ekleyin. Spinner iletişim kutusu açılmadan önce madde 0 için akım çevirici seçimi ayarlamak isteyebilirsiniz, bu, seçilmemiş bir spinner taklit.

ArrayAdapter yöntemi geçersiz: çevirici ile Kur örnek

List<String> list = new ArrayList<String>();
list.add("");   //  Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");

// Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {
        View v = null;

        // If this is the initial dummy entry, make it hidden
        if (position == 0) {
            TextView tv = new TextView(getContext());
            tv.setHeight(0);
            tv.setVisibility(View.GONE);
            v = tv;
        }
        else {
            // Pass convertView as null to prevent reuse of special case views
            v = super.getDropDownView(position, null, parent);
        }

        // Hide scroll bar because it appears sometimes unnecessarily, this does not prevent scrolling 
        parent.setVerticalScrollBarEnabled(false);
        return v;
    }
};

dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);

CEVAP
1 Mart 2013, Cuma


Rastgele bir öğe veya birden çok öğe ben gizlemek için kendi adaptörü uygulamak ve gizlemek istediğiniz dizini (veya liste dizisi) dizin ayarlayabilirsiniz.

public class CustomAdapter extends ArrayAdapter<String> {

     private int hidingItemIndex;

     public CustomAdapter(Context context, int textViewResourceId, String[] objects, int hidingItemIndex) {
         super(context, textViewResourceId, objects);
         this.hidingItemIndex = hidingItemIndex;
     }

     @Override
     public View getDropDownView(int position, View convertView, ViewGroup parent) {
         View v = null;
         if (position == hidingItemIndex) {
             TextView tv = new TextView(getContext());
             tv.setVisibility(View.GONE);
             v = tv;
         } else {
             v = super.getDropDownView(position, null, parent);
         }
         return v;
     }
 }

Ve öğelerin listesini oluşturmak için özel adaptörü kullanın.

List<String> list = new ArrayList<String>();
list.add("");   //  Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");

int hidingItemIndex = 0;

CustomAdapter dataAdapter = new CustomAdapter(this, android.R.layout.simple_spinner_item, list, hidingItemIndex);

dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);

Yardımcı (kodu test etmedim umarım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Adams

    Bryan Adams

    30 Mart 2006
  • Creavite

    Creavite

    8 Mart 2009
  • Kap Slap

    Kap Slap

    8 Mart 2010