Как сфокусироваться на элементе ListRow, который не может быть сфокусирован на Firestick 3-го поколения (Android API 28) через пульт дистанционного управления

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

onFocus() пользовательского представления не вызывается в FireStick версии 3 (Android API 28). Тот же код запускается в более ранних версиях (‹ Android API 28)

Настраиваемое представление — это ListRow для отображения жанров фильмов, в которые GenrePresenter передает данные.

genrePresenter = new GenrePresenter(new GenrePresenter.viewListener() {
            @Override
            public void onClick(View view, String selected) {
                ((HomeFYCActivity) getActivity()).showAdapter(viewModel.genreList, selected);
            }

//THIS DOES NOT GET TRIGGERED ON API 28
            @Override
            public void onFocus(View view, Boolean hasFocus) {
                // NEED TO SET FOCUS HERE 
            }
        }, "ALL GENRES");

        header = new HeaderItem("NOW PLAYING");
        genreRow = new ListRow(header, genreRowAdapter);

Но вместо этого HeaderItem получает фокус.

Тот же код работает на ‹ Android API 28

Удаленный трекпад используется для выбора других представлений.

РЕДАКТИРОВАТЬ код слушателя жанра Presenter

    public interface viewListener {
        void onClick(View view, String selected);
        void onFocus(View view, Boolean hasFocus);
    }

И как я вызываю слушателя

        ((ShowCard) viewHolder).tvGenre.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                viewListener.onFocus(v, hasFocus);
            }
        });

person Subhasmith Thapa    schedule 29.06.2021    source источник
comment
Можете ли вы поделиться кодом GenrePresenter.viewListener().   -  person Velu    schedule 08.07.2021
comment
@Velu добавил код презентатора жанра. Дайте мне знать, если вам нужна дополнительная информация   -  person Subhasmith Thapa    schedule 09.07.2021
comment
Похоже, вы устанавливаете focusChangeListener на textView, tvGenre, textView по умолчанию не фокусируется, установите для свойства focusable значение true или setOnFocusChangeListener для самого viewHolder и снова убедитесь, что вы установили для свойства focusable значение true. И я считаю, что для того, чтобы увидеть изменение фокуса/расфокуса, вы определили изменение цвета.   -  person Velu    schedule 09.07.2021
comment
я попытался заменить textview на edittext здесь, и все равно фокуса не было, я попытаюсь поместить фокусируемое свойство в сам просмотрщик и проверить, но я запутался, потому что то же самое работает на API ниже 28. и не работает выше API 28. Что я упустил? @Велу   -  person Subhasmith Thapa    schedule 09.07.2021
comment
Это странно. Уровень API для этой проблемы не должен быть проблемой. Вы тестируете в эмуляторе или на реальном устройстве? , запустите этот пример приложения с сайта Google github.com/android/tv-samples, демонстрационной версии специальных возможностей. модуль и посмотреть, есть ли такая же проблема в этом устройстве.   -  person Velu    schedule 09.07.2021
comment
я использую FireStick V3 на телевизоре. @Велу   -  person Subhasmith Thapa    schedule 09.07.2021
comment
@Velu решил это   -  person Subhasmith Thapa    schedule 09.07.2021


Ответы (1)


Привет. После нескольких дней тщательных проб и ошибок я обнаружил, что родительский XML-файл LinearLayout должен быть установлен как

    android:clickable="false"
    android:focusable="false"

и элемент, который находится внутри родителя, в моем случае текстовое представление должно было быть определено как

   android:clickable="true"
   android:focusable="true"
   android:focusableInTouchMode="true"

Я надеюсь, что этот ответ сэкономит ваше время.

Аминь

person Subhasmith Thapa    schedule 09.07.2021