Mam dwa obrotnice, które chcę "związać" ze sobą w sensie wzajemnie wykluczającym się: jeśli wybierzesz przedmiot w jednym, tekst tego przedmiotu zmieni kolor na czerwony i pojawi się u góry, a drugi powraca do wyświetlania początkowego ("tytułowego") wyboru (jeśli wcześniej wybrano inny element), a jego tekst zmienia kolor na biały."Synchronizacja" dwóch spinnerów
To wszystko odbywa się za pośrednictwem onItemSelected słuchaczy:
sectionSpin.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View arg1,
int position, long arg3) {
issueSpin.setSelection(0);
((TextView) issueSpin.getChildAt(0)).setTextColor(Color.parseColor("#FFFFFF"));
((TextView) arg1).setTextColor(Color.parseColor("#E3170D"));
....
i vice versa dla "spinner emisyjnej". Mój problem polega na tym, że jeśli przechodzę z jednego pokrętła do drugiego i wybieram najwyższy element, to onItemSelectedListener nie rejestruje się, ponieważ wybrany element jest już wybrany.
Powiedziano mi, że nie jest to możliwe. Lub raczej powiedziano mi, że nie jest możliwe, aby obiekt nasłuchujący onItemSelected uruchomił element, który jest już wybrany. Chociaż zdaję sobie sprawę, że jest to prawdą techniczną, problem ten wydaje się stosunkowo prosty i jestem pewien, że musi istnieć obejście, aby uzyskać pożądany efekt.
Mam kilka pytań dotyczących niektórych, że mam rozważała:
- Czy istnieje jakiś sposób, aby ustawić wszystkie elementy w turbinki jak zaznaczone, jednocześnie wyświetlając jedną z nich?
- Czy mogę użyć innego rodzaju zdarzenia (np. "SetOnTouchListener", "setOnClickListener" itp.), Prawdopodobnie na górnym elemencie, w połączeniu z
onItemSelectedListener
? - Czy powinienem sam używać innego rodzaju zdarzenia, być może w Widoku napompowanym samodzielnie, bez numeru
onItemSelectedListener
? - Czy możesz mi pomóc znaleźć lepszą strategię niż te, o których mowa w punktach powyżej?
Jednak dla ogólnego projektu tej aplikacji kluczowe znaczenie ma to, że menu otwiera się jak spinner - tzn. Że opcje są opuszczane. – drewmoore
@dniej podałem odpowiedź, która rozwiązuje opisany problem w pytaniu. Najpierw rozważyłem podklasę "Spinnera" i nadpisanie odpowiedzialnej metody (gdzie jest jasne, że 'onItemSelectedListener' nie jest wywoływany, jeśli wybrany element jest taki sam), ale to nie było możliwe, ponieważ metoda jest prywatna. Możesz emulować animację, jeśli jej tak potrzebujesz, używając innych metod. Jeśli jednak moja odpowiedź nie pomoże Ci z powodu pewnych nieujawnionych w pytaniu powodów, powinieneś edytować swoje pytanie. – Shade