Mam widok aktualizacji, w którym muszę wstępnie wybrać wartość przechowywaną w bazie danych dla Spinnera.
Miałem na myśli coś takiego, ale Adapter
nie ma indexOf
metody, więc utknąłem.
void setSpinner(String value)
{
int pos = getSpinnerField().getAdapter().indexOf(value);
getSpinnerField().setSelection(pos);
}
Prostym sposobem ustawienia tarczy na podstawie wartości jest
Istnieje już sposób na skomplikowany kod, jest to o wiele prostsze.
źródło
break;
gdy indeks zostanie znaleziony, aby przyspieszyć proces.0
powinieneś zwrócić,-1
jeśli wartość nie zostanie znaleziona - jak pokazano w mojej odpowiedzi: stackoverflow.com/a/32377917/1617737 :-)0
jako scenariusz kopii zapasowej. Jeśli ustawisz-1
, który element będzie widoczny na tarczy, przypuszczam, że 0. element adaptera tarczy, dodanie -1 dodaje również nadwagi sprawdzania, czy wartość wynosi -1, czy nie, ponieważ ustawienie -1 spowoduje wyjątek.Trzymam osobną listę ArrayList wszystkich elementów w moich Spinnerach. W ten sposób mogę wykonać indexOf na ArrayList, a następnie użyć tej wartości, aby ustawić wybór w Spinneru.
źródło
Opierając się na odpowiedzi Merrill , wymyśliłem to rozwiązanie jednoliniowe ... nie jest zbyt ładne, ale możesz winić każdego, kto utrzymuje kod
Spinner
za zaniedbanie włączenia funkcji, która to robi.Otrzymasz ostrzeżenie o tym, jak
ArrayAdapter<String>
odznaczono rzutowanie na ... naprawdę, możesz po prostu użyć takiego,ArrayAdapter
jak Merrill, ale to po prostu zamienia jedno ostrzeżenie na drugie.źródło
jeśli używasz tablicy ciągów, jest to najlepszy sposób:
źródło
Możesz użyć tego również,
źródło
Jeśli potrzebujesz metody indexOf na dowolnym starym adapterze (i nie znasz podstawowej implementacji), możesz użyć tego:
źródło
Na podstawie odpowiedzi Merrill tutaj jest, jak zrobić z CursorAdapter
źródło
Użyj następującej linii, aby wybrać wartość:
źródło
Używam niestandardowego adaptera, do tego wystarczy ten kod:
Tak więc fragment kodu będzie wyglądał następująco:
źródło
To moja prosta metoda na uzyskanie indeksu przez ciąg znaków.
źródło
Możesz użyć tego sposobu, po prostu uprość kod.
Mam nadzieję, że to pomoże.
źródło
oto moje rozwiązanie
i getItemIndexById poniżej
Mam nadzieję, że to pomoże!
źródło
Oto jak to zrobić, jeśli używasz
SimpleCursorAdapter
(gdziecolumnName
jest nazwa kolumny db użytej do wypełnienia twojejspinner
):Również (udoskonalenie odpowiedzi Akhila ) jest to odpowiedni sposób, aby to zrobić, jeśli wypełniasz swój Błystek z tablicy:
źródło
Jeśli ustawisz tablicę XML na pokrętło w układzie XML, możesz to zrobić
źródło
Istnieje sposób na uzyskanie tego za pomocą wyszukiwania indeksów na AdapterArray, a wszystko to można zrobić za pomocą refleksji. Poszedłem nawet o krok dalej, ponieważ miałem 10 Spinnerów i chciałem ustawić je dynamicznie z mojej bazy danych, a baza danych przechowuje wartość nie tylko tekstu, ponieważ Spinner faktycznie zmienia się z tygodnia na tydzień, więc wartość jest moim numerem identyfikacyjnym z bazy danych.
Oto wyszukiwanie indeksowane, którego można użyć na prawie każdej liście, o ile pola znajdują się na najwyższym poziomie obiektu.
Metoda rzutowania, którą można utworzyć dla wszystkich prymitywów tutaj, to metoda na łańcuch i int.
źródło
Aby aplikacja zapamiętała ostatnio wybrane wartości pokrętła, możesz użyć poniższego kodu:
Poniższy kod odczytuje wartość przędzarki i odpowiednio ustawia pozycję przędzarki.
I umieść poniżej kodu, gdzie wiesz, że obecne są najnowsze wartości przędzarki, lub gdzieś indziej zgodnie z wymaganiami. Ten fragment kodu zasadniczo zapisuje wartość pokrętła w SharedPreferences.
źródło
Miałem ten sam problem, gdy próbowałem wybrać prawidłowy element w pokrętle wypełnionym za pomocą kursora. Pobrałem identyfikator elementu, który chciałem najpierw wybrać z tabeli 1, a następnie użyłem CursorLoader do wypełnienia pokrętła. W trybie onLoadFinished przewijałem kursor wypełniając adapter błystki, aż znalazłem element pasujący do identyfikatora, który już miałem. Następnie przypisał numer wiersza kursora do wybranej pozycji przędzarki. Byłoby miło mieć podobną funkcję do przekazywania identyfikatora wartości, którą chcesz wybrać w błystce podczas wypełniania szczegółów w formularzu zawierającym zapisane wyniki przędzarki.
źródło
Ponieważ niektóre z poprzednich odpowiedzi są bardzo poprawne, chcę się tylko upewnić, że nikt z was nie popełni takiego problemu.
Jeśli ustawisz wartości na
ArrayList
usingString.format
, MUSISZ uzyskać pozycję wartości przy użyciu tej samej struktury ciągówString.format
.Przykład:
Musisz uzyskać pozycję o potrzebnej wartości w ten sposób:
W przeciwnym razie otrzymasz
-1
element, którego nie znaleziono!Użyłem z
Locale.getDefault()
powodu języka arabskiego .Mam nadzieję, że ci się przyda.
źródło
Oto moje, mam nadzieję, kompletne rozwiązanie. Mam następujące wyliczenie:
używane w następującej klasie
Kod do ustawienia pokrętła według elementu enum HTTPMethod:
Gdzie
R.id.spinnerHttpmethod
jest zdefiniowany w pliku układu iandroid.R.layout.simple_spinner_item
jest dostarczany przez android-studio.źródło
źródło
bardzo prosty po prostu użyj
getSelectedItem();
np .:
powyższa metoda zwraca wartość ciągu
powyżej
R.array.admin_type
znajduje się plik zasobów łańcuchowych w wartościachpo prostu utwórz plik .xml w wartościach >> ciągach
źródło
Załóżmy, że musisz wypełnić pokrętło z tablicy łańcuchów z zasobu i chcesz zachować wybraną wartość z serwera. Jest to więc jeden ze sposobów ustawienia wybranej wartości z serwera w pokrętle.
Mam nadzieję, że to pomoże! PS kod znajduje się w Kotlin!
źródło
Ponieważ potrzebowałem czegoś, co również działa z lokalizacją , wymyśliłem te dwie metody:
Jak widać, natknąłem się również na dodatkową złożoność rozróżniania wielkości liter między tablicami.xml a tymi, z
value
którymi się porównuję. Jeśli tego nie masz, powyższą metodę można uprościć do czegoś takiego:return arrayValues.indexOf(value);
Metoda statycznego pomocnika
źródło
musisz przekazać niestandardowy adapter o pozycji takiej jak REPEAT [pozycja]. i działa poprawnie.
źródło