Я реализовал систему стека View для моего приложения Android, которое после нажатия нового представления удаляет текущее представление в целевом макете, сохраняет его в стеке, а затем добавляет новый вид в макет.Android ListView не получает события itemClick после удаления с помощью removeAllViews() и восстанавливается с помощью addView
Он работает безупречно, пока не попытаюсь сохранить, а затем восстановит представление, содержащее ListView. При этом ListView не получает событий itemClick, хотя он выполняет прокрутку.
Код для системы стека выглядит следующим образом:
Stack<View> viewStack;
public View pushView(View v) {
// 1. Get reference to main content panel
LinearLayout content = (LinearLayout) findViewById(R.id.contentPanel);
View last = content.getChildAt(0);
// Pushing old to stack
viewStack.push(last);
// 2. Clear it
content.removeAllViews();
// 3. Add new View
content.addView(v);
return last;
}
public View popView() {
if (!viewStack.isEmpty()) {
// 1. Get reference to main content panel
LinearLayout content = (LinearLayout) findViewById(R.id.contentPanel);
View last = content.getChildAt(0);
// 2. Clear it
content.removeAllViews();
// 3. Add last View
content.addView(viewStack.pop());
// Pushing old to stack
return last;
} else {
return null;
}
}
Любопытно, что другие элементы в представлении, содержащей ListView (CheckBoxes и кнопки) DO получить clickEvents. Подозреваю: 1. ListView потерял фокус, поэтому он не будет получать эти события, или 2. ListView был отсоединен от onItemClickListener
Спасибо заранее!
Я думаю, что вам нужно добавить слушателя на каждый элемент, когда вы добавите его в вид – Guillaume
Конечно, когда представление, содержащее ListView, создается и добавляется в первый раз, все работает. Проблема возникает при сохранении и восстановлении с помощью показанных методов. Извините, я забыл указать на то, что :) – thegraffo
Хорошо, вы добавляете слушателя в первый раз, но не после? – Guillaume