Java - обработчик кнопки onClick: получить сфокусированное представление внутри представления без необходимости дважды щелкать

Я неожиданно столкнулся со странным поведением. Я создаю взгляды полностью динамично. В основном я получаю данные из базы данных, которая говорит мне, как и какой интерфейс я должен генерировать.

Я получаю элементы управления, такие как кнопки, ярлыки, что угодно. Теперь я создаю две кнопки динамически, назначаю собственный обработчик onClick с этой логикой

            this.setOnClickListener(new OnClickListener() {                    
                  @Override
                  public void onClick(View v) {                       
                      GenButtonClick(v);
                  }
                });

Это прямо вперед. Клик обрабатывается хорошо для первой кнопки. Первый элемент управления в верхнем левом углу как-то получает фокус во время выполнения. Но это странный фокус. Когда я нажимаю на другую кнопку, мне нужно дважды щелкнуть, чтобы обработать обработчик события. И когда я возвращаюсь к первой кнопке, мне также приходится нажимать дважды.

Я выяснил, какая строка вызывает такое поведение.

    this.setClickable(true);        
    this.setFocusable(true);            
    this.setFocusableInTouchMode(true);  // <-- this line.

Я напомнил эту строку в целях тестирования. У меня сейчас другая проблема. Я не могу получить сфокусированный контроль впоследствии. Но мне нужно название сфокусированного контроля. Что я могу сделать сейчас? Придется ли мне создавать атрибут в моей фрагментации типа View, который я буду заполнять в onClickListener? Или есть внутренний механизм? Я, конечно, не должен использовать setFocusableInTouchMode(true), потому что пользователь должен будет щелкнуть дважды. requestFocus() не помогает, потому что обработчик onClick обрабатывается ПОСЛЕ нажатия кнопки один раз. Что я могу сделать лучше всего в этом случае?

Теперь я экспериментировал с OnTouchEvent, чтобы решить эту проблему. И это работает. Однако я не знаю, является ли это правильным подходом или лучшим вариантом. Нет ли лучшего способа "прямо вперед", чтобы использовать простой обработчик onClick для получения фокуса нажатой кнопки И обрабатывать обработчик события onClick ОДНЫМ способом?

0 ответов

Другие вопросы по тегам