Mam 2 wyskakujące okienka. Na pierwszym wyskakującym okienku mam ListView
z opcjami do wyboru. Kiedy klikam element z pierwszej listy, pojawiają się drugie wyskakujące okienko, które ma również ListView
z opcjami do wyboru.Zdarzenie onClick nie działa w przypadku kontrolki elementu zagnieżdżonej listy w Androidzie
I zostały wdrożone pierwsze elementy listy Zobacz w formie zwyczaju View
i subskrybowania kliknięć wewnątrz widzenia konstruktora, tak jak:
class CustomListItem extends RelativeLayout{
public CustomListItem(){
...
//inflating stuff there
((Button)findViewById(R.id.listItemButton)).setOnClickListener(
//This code not working as expected, but then could fire a lot of times
v -> System.out.println("item clicked");
);
}
}
Kiedy otwieram pierwsze okno po raz pierwszy onClick
pożarów procedur obsługi, jak oczekiwano, a drugie okienko pojawia się. Ale kiedy zamykam drugie wyskakujące okienko i wracam (wywołując Dialog.dismiss()
dla wyskakującego okienka) do pierwszego wyskakującego okienka, to obsługa onClick
na pierwszym widoku listy przestaje działać. Istnieje kilka innych rzeczy inetersting:
onTouch
słuchacz do widoku listy pozycji nadal pracuje (zwany dlaaction=ACTION_DOWN
iaction=ACTION_UP
);- kiedy ustawiam na listę publiczną
onItemClickListener
nazywa się zawsze (pierwszy raz, gdy wyskakujące okienko jest otwarte i kiedy wracamy do niego); - po kliknięciu wiele razy na pozycję w widoku listy, zdarza się czasem
onClick
, a następnie jest wywoływana tyle razy, ile wcześniej kliknąłem .
Czy masz jakieś pomysły, co może być przyczyną problemu?
UPDATE
Wydaje się, że istnieje problem z getView
metody wewnątrz adaptera. Próbowałem stworzyć kontrolę elementu listy niestandardowe wewnątrz niego (lub dostać go z pamięci podręcznej):
@Override
public View getView(int position, View view, ViewGroup parent) {
if (!constructedViewCache.containsKey(position)) {
constructedViewCache.put(position, new CustomListItem());
}
return constructedViewCache.get(position);
}
Kiedy zmienił ten kod do kodu poniżej wszystko działa:
@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null)
{
view = LayoutInflater.from(context).inflate(R.layout.list_view_item, null);
}
view.setOnClickListener(v -> {
v -> System.out.println("item clicked");
});
return view;
}
Dlaczego to nie jest można utworzyć widok z new CustomListItem()
? A jeśli to możliwe, jak mam to zrobić?
Am I rozumiem, że onclick nie pracował prawidłowo, ale jeśli kliknięciu wiele razy, powiedzmy 20-30 Mogło ogień i po tym kodzie dla onclick zostanie wykonany 20-30 razy? –
czy możesz udostępnić więcej kodu? –
@vovaxo pełny kod jest bardzo skomplikowany. która część kodu może ci się przydać? – Natasha