Bir Android spinner widget'ında bir öğeyi gizlemenin bir yolunu arıyorum. Bu, hiçbir öğe seçilmemiş bir döndürücüyü simüle etmenize olanak tanır ve seçilen her öğe için her zaman onItemSelected () geri çağrısının çağrılmasını sağlar (gizli öğe "geçerli" öğe ise). Normalde çarkta her zaman bir geri arama oluşturmayan bir öğe vardır, yani mevcut olan.
Stackoverflow'da öğelerin nasıl devre dışı bırakılacağına (grileştirileceğine) ilişkin bazı kodlar vardır, ancak öğeler yokmuş gibi nasıl tamamen gizleneceği yoktur.
Uzun deneyimlerden sonra, çeşitli eski ve yeni Android platformlarında çalışan biraz hack-ish bir çözüm buldum. Fark edilmesi zor bazı küçük kozmetik dezavantajları vardır. Yine de "bunu bir iplikçiyle yapma" dışında daha resmi bir çözüm duymak istiyorum.
Bu her zaman çarktaki ilk öğeyi gizler, ancak keyfi bir öğeyi veya birden fazla öğeyi gizlemek için oldukça kolay bir şekilde genişletilebilir. Döndürücü öğeler listenizin başına boş bir dizi içeren sahte bir öğe ekleyin. Döndürücü diyalogu açılmadan önce mevcut döndürücü seçimini öğe 0'a ayarlamak isteyebilirsiniz, bu, seçilmemiş bir döndürücüyü simüle edecektir.
ArrayAdapter yöntemi geçersiz kılma ile Spinner kurulum örneği:
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);