2010-05-31 26 views
17

Potrzebuję pomocy w ustawianiu wartości i wyświetlaniu tekstu w pokrętle. jak na teraz jestem wypełniania mój tarczy tablicy przez adapter npUstawianie wartości i wyświetlanie tekstu w Androidzie Spinner

mySpinner.setAdapter(myAdapter); 

io ile wiem, po zrobieniu tego tekstu wyświetlacza i wartość pokrętła w tej samej pozycji jest taka sama. Drugim atrybutem, który mogę uzyskać z przędzarki, jest pozycja na przedmiocie.

teraz w moim przypadku chcę zrobić spinner jak rozwijane pole, które mamy w .NET.

która zawiera tekst i wartość.

gdzie tekst jest wyświetlany, a wartość jest z tyłu. , więc jeśli zmienię listę rozwijaną, mogę użyć jej wybranego tekstu lub wartości. ale nie dzieje się to w przypadku androida.

na przykład:

Tekst Wartość
Cat 10
Mountain 5
Kamień 9
Fish 14
rzeki 13
Lędźwie 17

więc z powyższej tablicy Mam tylko wyświetlanie nieożywionych obiektów tekstowych, i to, co chcę jest to, że gdy użytkownik je wybrać się tam dostać wartość czyli jak po wybraniu Mountain ja dostać 5

Mam nadzieję, że przykładem wykonany moje pytanie nieco bardziej jasne ...

thankx

+0

Innym doskonałym rozwiązaniem, jeśli nie dostaniesz go od utrwalonej źródłem danych i to tylko statyczna tablica wyświetlania tekstu i Wartości to enum. Daj mi znać, jeśli jesteś zainteresowany, a ja opublikuję odpowiedź. –

+0

Zobacz to na teraz: http://stackoverflow.com/a/37266810/293280 –

Odpowiedz

11

Krok 1: Tworzenie modelu danych dla pary tekstu i wartości

Krok # 2: Rozszerzenie BaseAdapter lub ArrayAdapter owinąć wokół modelu danych, przesłanianie getView() wrócić cokolwiek chcesz wyświetlić w Spinner sama

Krok 3: Na razie wyboru, należy użyć pozycji, aby znaleźć odpowiedni obiekt w modelu danych, a patrzeć wartość

Jeśli wszystko chcesz wyświetlić w Spinner jest tylko reprezentacja tekst każdego elementu w modelu danych, można pominąć zwyczaj Adapter - wystarczy użyć ArrayAdapter<YourModelClass> i zastąpić toString() na YourModelClass wrócić cokolwiek wyświetlacz żądany tekst.

+0

brakowało toString() w modelu, dzięki za sugestię! – cking24343

15

Jeśli nie chcesz tworzyć własnej klasy adaptera, możesz zamiast tego zawinąć dane w coś, co ma toString, który zwraca to, co chcesz pokazać w pokrętle.Używam klasy tak:

public class TextItemPair<T> { 
    private String text; 
    private T item; 
    public TextItemPair(String text, T item) { 
      this.text = text; 
      this.item = item; 
    } 
    public String getText() { 
     return text; 
    } 
    public T getItem() { 
     return item; 
    } 
    @Override 
    public String toString() { 
     return getText(); 
    } 
} 

A gdy zmienia spinner:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    YourTypeHere t = ((TextItemPair<YourTypeHere>)spinner.getItemAtPosition(position)).getItem(); 
} 
+0

to wystarczy, jeśli masz niestandardową klasę tekstową @Override public String toString() { return getText(); } –

Powiązane problemy