Android: как настроить прослушиватель, который срабатывает, когда мой ViewFlipper показывает новый дочерний элемент

У меня есть ViewFlipper, для которого я хочу, чтобы прослушиватель срабатывал при изменении отображаемого дочернего элемента. Я установил OnFocusChangeListener для ViewFlipper, но он никогда не срабатывает, когда я переключаюсь с дочернего элемента 0 на дочерний элемент 1 или наоборот. ViewFlipper содержит два RelativeLayouts, и я попытался установить OnFocusChangeListeners для них, но я получаю исключение ClassCastException, когда пытаюсь его установить. Вот мой код:

RelativeLayout songsLayout = (RelativeLayout) findViewById(R.id.song_page_layout);
songsLayout.setOnFocusChangeListener(new OnFocusChangeListener() {
    public void onFocusChange(View view, boolean hasFocus) {
        showPopUp("View " + view.getId() + " now has focus: " + hasFocus);
    }       
} );

R.is.song_page_layout — это один из моих RelativeLayouts, а showPopUp() — это функция, которую я использую для отображения всплывающих окон.

У кого-нибудь есть рабочий код для какого-то триггера, который срабатывает, когда ViewFlipper меняет отображаемый дочерний элемент?


person Joseph Cheek    schedule 20.04.2010    source источник


Ответы (1)


Я думаю, вы не понимаете, что означает «фокус» на Android; это когда пользователь выбирает этот вид, например, когда он выбирает EditText, нажимая на него, или использует клавиатуру для выбора кнопки. Когда ViewFlipper переключает представления, он не получает и не теряет фокус.

Насколько я знаю, вы можете:

  1. Не используйте автоматическое перелистывание ViewFlipper, вместо этого вручную вызывайте showNext(), когда вы хотите, чтобы оно переворачивалось (затем самостоятельно устанавливая интервал в коде).

  2. Подкласс или повторная реализация ViewFlipper и добавление прослушивателя изменений по своему вкусу.

person Dan Lew    schedule 20.04.2010