Auch dieses Problem habe ich mit dem folgenden Code gelöst. Angenommen, Sie haben eine Liste von Elementen, z. B.
ArrayList<Item> itemsArrayList = new ArrayList<Item>();
Item item1 = new Item();
item1.setId(1);
item1.setData("First Element");
Item item2 = new Item();
item2.setId(2);
Item2.setData("Second Element");
itemsArrayList.add(item1);
itemsArrayList.add(item2);
Jetzt müssen wir Spinner die Zeichenketten zur Verfügung stellen, weil Spinner das Objekt nicht verstehen kann. Wir werden also eine neue Array-Liste mit String-Elementen wie folgt erstellen ->
ArrayList<String> itemStringArrayList = new ArrayList<String>();
for(Item item : itemsArrayList) {
itemStringArrayList.add(item.getData());
}
Jetzt haben wir itemStringArrayList
Array-Liste mit zwei String-Elementen. Und wir müssen den Text "Element auswählen" als erstes Element anzeigen. Also müssen wir einen neuen String in die itemStringArrayList
.
itemStringArrayList.add("Select Item");
Jetzt haben wir eine Array-Liste itemsArrayList
und wir wollen zwei Elemente in der Dropdown-Liste anzeigen. Aber die Bedingung hier ist ... Wenn wir nichts auswählen, dann Select Item
sollte als erstes Element erscheinen, das nicht aktiviert werden soll.
Wir können diese Funktion also wie folgt implementieren. Wenn Sie die Array-Listenelemente in den Android-Spinner laden müssen. Dann müssen Sie einen Adapter verwenden. Hier verwende ich also den ArrayAdapter
. Wir können auch den Customise Adapter verwenden.
ArrayAdapter<String> itemsArrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.spinner_item, itemsArrayList){
@Override
public boolean isEnabled(int position) {
if(position == 0)
{
return false;
}
else
{
return true;
}
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
View view = super.getDropDownView(position, convertView, parent);
TextView tv = (TextView) view;
if(position == 0){
// Set the hint text color gray
tv.setTextColor(Color.GRAY);
}
else {
tv.setTextColor(Color.BLACK);
}
return view;
}
};
itemsArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
your_spinner_name.setAdapter(itemsArrayAdapter);
Hier in diesem Code verwenden wir das angepasste Spinner-Layout, d.h. R.layout.spinner_item
. Es ist eine einfache Textansicht
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textStyle="italic"
android:fontFamily="sans-serif-medium"
/>
Wir müssen den ersten Text im Spinner deaktivieren. Also für die Position 0 sind wir den Text zu deaktivieren. Und die Farbe können wir auch durch Überschreiben der getDropDownView-Methode einstellen. Auf diese Weise erhalten wir den erwarteten Spinner.
7 Stimmen
Die perfekte Lösung liegt in dieser Frage: stackoverflow.com/questions/9863378/ Überschreiben Sie einfach die Methode getDropDownView().
0 Stimmen
Haben Sie versucht, das erste Element Ihres Adapters auf "Select One" einzustellen?
0 Stimmen
[Hier eine andere tolle, schöne Lösung!][1] [1]: stackoverflow.com/questions/9863378/
0 Stimmen
Wiederverwendbare Spinner : github.com/henrychuangtw/ReuseSpinner
1 Stimmen
Android--code.blogspot.in/2015/08/Android-spinner-hint.html ein weiteres gutes Tutorial
0 Stimmen
Theres eine weit bessere Lösung - Verwenden Sie AutocompleteTextView, und setzen Sie clickable und focusable auf false. Fügen Sie die Elemente als Vorschläge Liste. Wickeln Sie die AutocompleteTextView in einem TextInputLayout und Sie können einen Hinweis festlegen. So wird der Hinweis zunächst angezeigt, und wenn Sie darauf klicken, wird die Liste der Vorschläge (Ihre Elemente) angezeigt. Die klickbare und fokussierbare auf false wird die Tastatur aus popping-out und jede manuelle Eingabe zu verhindern, im Grunde macht es eine perfekte Dropdown-Menü.