Pracuję nad projektem Androida i używam tarczy, która korzysta z adaptera tablicy zapełnianego z bazy danych.
Nie mogę dowiedzieć się, jak mogę programowo ustawić wybrany element z listy. Na przykład, jeśli w przędzarce mam następujące elementy:
- Kategoria 1
- Kategoria 2
- Kategoria 3
W jaki sposób programowo uczynię kategorię 2 wybranym elementem podczas tworzenia ekranu. Myślałem, że może być podobny do c # IE Spinner.SelectedText = "Kategoria 2", ale wydaje się, że nie ma metody podobnej do tej dla Androida.
spinner.setSelection()
. To by działało dobrze. Możesz także utworzyć metodę, która pomoże ci dopasować indeksy do ich rzeczywistych ciągów.Odpowiedzi:
Użyj następujących:
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.źródło
mySpinner.setSelection(arrayAdapter.getPosition("Category 2"));
Żadna z tych odpowiedzi nie dała mi rozwiązania, tylko działała z tym:
źródło
Możesz użyć powyższych, takich jak:
i oczywiście możesz również wybrać według indeksu bezpośrednio jak
źródło
Category 2
który, jak sądzę, był Ciągiem (zakładając, że próbował użyćSpinner.SelectedText = "Category 2"
), ale powyższy kod dotyczylong
.adapter.getItem(position)
, nieadapter.getItemId(position)
.Pewne wyjaśnienie (przynajmniej dla Fragmentów - nigdy nie próbowano z czystą Aktywnością). Mam nadzieję, że pomoże to komuś lepiej zrozumieć Androida.
Najpopularniejsza odpowiedź Arun George jest poprawna, ale w niektórych przypadkach nie działa.
Odpowiedź Marco HC używa Runnable, który jest ostatecznością ze względu na dodatkowe obciążenie procesora.
Odpowiedź brzmi - powinieneś po prostu wybrać odpowiednie miejsce do wywołania setSelection () , na przykład to działa dla mnie:
Ale to nie zadziała w onCreateView () . Podejrzewam, że to jest powód zainteresowania tym tematem.
Sekret polega na tym, że w Androidzie nie możesz zrobić nic, co chcesz w żadnej metodzie - oops :( - składniki mogą po prostu nie być gotowe. Jako kolejny przykład - nie można przewijać ScrollView ani w onCreateView (), ani w onResume () ( zobacz odpowiedź tutaj )
źródło
Aby znaleźć wartość i wybrać ją:
źródło
Dlaczego nie użyjesz swoich wartości z bazy danych i nie zapiszesz ich na ArrayList, a następnie po prostu użyjesz:
źródło
Optymalne rozwiązanie to:
Aby uzyskać pozycję elementu, dodaj automatycznie następujące oświadczenie
źródło
Możesz stworzyć ogólną metodę dla tego rodzaju pracy, tak jak ja w mojej UtilityClass, która jest
źródło
Możesz łatwo ustawić w ten sposób:
spinner.setSelection(1)
zamiast 1 możesz ustawić dowolną pozycję listy, którą chcesz wyświetlić.źródło
Mam SimpleCursorAdapter, więc muszę zduplikować dane, aby użyć respose w tym poście. Polecam więc spróbować w ten sposób:
Myślę, że to prawdziwy sposób
źródło
To dla mnie praca.
źródło
Jeśli masz listę kontaktów, możesz to zrobić:
źródło
Wiem, że już na nie odpowiedziano, ale prosty kod, aby wybrać jeden element, bardzo prosty:
źródło
źródło
Jest to stwierdzone w komentarzach w innych miejscach na tej stronie, ale uważam, że warto wyciągnąć je w odpowiedzi:
W przypadku korzystania z zasilacza, znalazłem, że
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
potrzeby występować po tejsetAdapter
rozmowy; w przeciwnym razie pierwszym elementem jest zawsze wybór początkowy.Potwierdza to przejrzenie kodu AbsSpinner dla
setAdapter
.źródło
Oto, czego używam w Kotlinie:
źródło
indexOf
nie można dopasować, wówczas zwraca-1
, co wydaje się skutkować wybraną wartością domyślnąspinner.setSelection
. Nie przeszkadza mi to.W moim przypadku ten kod uratował mi dzień:
źródło
Większość czasu
spinner.setSelection(i); //i is 0 to (size-1) of adapter's size
nie działa. Jeśli tylko zadzwoniszspinner.setSelection(i);
To zależy od twojej logiki.
Jeśli widok jest w pełni załadowany i chcesz wywołać go z interfejsu, sugeruję zadzwonić
Lub jeśli chcesz przełączać się między cyklem życia aktywności / fragmentu, zadzwoń w ten sposób
źródło
Zrobiłem funkcję rozszerzenia
Spinner
do ładowania danych i śledzenia wyboru elementu.Spinner.kt
Przykład użycia
źródło
To działało dla mnie:
Jest podobny do rozwiązania @ sberezin, ale wywołuje setSelection () w onStart ().
źródło
Miałem ten sam problem od wczoraj. Niestety pierwszy element na liście tablic jest domyślnie wyświetlany w widżecie przędzarki. Odwróceniem byłoby znalezienie poprzednio wybranego elementu z każdym elementem na liście tablic i zamiana jego pozycji z pierwszym elementem. Oto kod.
źródło