У меня есть 2 всплывающих окна. При первом всплывающем окне у меня есть ListView
с возможностью выбора. Когда я нажимаю элемент из первого списка, появляется второе всплывающее окно, которое также имеет ListView
с параметрами для выбора.Событие onClick не работает с элементом управления вложенным элементом списка в android
Я реализовал первые элементы списка просмотра в качестве пользовательских View
и подписавшись на щелчки внутри вида конструктору, что:
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");
);
}
}
Когда я открываю первый диалог в первый раз onClick
обработчик пожары, как ожидается, и вторым всплывающее окно появляется. Но когда я закрываю второе всплывающее окно и возвращаюсь обратно (вызывая Dialog.dismiss()
для всплывающего окна) до первого всплывающего окна, то обработчик onClick
в первом списке перестает работать. Есть некоторые другие inetersting вещи:
onTouch
слушатель для списка просмотра элемента все еще работает (так называемый дляaction=ACTION_DOWN
иaction=ACTION_UP
);- Когда я установил для listview
onItemClickListener
, он всегда называется (первый раз, когда всплывающее окно открылось и когда мы возвращаемся обратно к нему); - Когда я нажимаю много раз на элемент в виде списка, иногда
onClick
происходит, и после этого он называется столько раз, сколько я нажимал раньше.
У вас есть идеи, что может быть причиной проблемы?
ОБНОВЛЕНИЕ
Кажется, что существует проблема с getView
метода внутри адаптера. Я пытался создать пользовательский элемент управления элемента списка внутри него (или получить его из кэша):
@Override
public View getView(int position, View view, ViewGroup parent) {
if (!constructedViewCache.containsKey(position)) {
constructedViewCache.put(position, new CustomListItem());
}
return constructedViewCache.get(position);
}
Когда я изменил этот код на код ниже все работает:
@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;
}
Почему это не возможно создать вид с new CustomListItem()
? Или, если возможно, как мне это сделать?
Может ли я правильно понимаю, что OnClick не правильно работало, но если вы щелкая много раз, скажем, 20-30 он мог огонь и после этого код для onclick будет выполняться 20-30 раз? –
Вы могли бы поделиться больше кода? –
@vovaxo полный код очень сложный. какая часть кода может быть полезна для вас? – Natasha