如何通过遥控器聚焦在 Firestick 3rd GenerationAndroid API 28上不可聚焦的 ListRow 项目

问题描述

我正在使用 Leanback 架构开发一个应用程序,其中使用遥控器的 dpad 不关注某个自定义视图。

自定义视图的 onFocus() 在 FireStick 版本 3(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 获得了焦点。

相同的代码适用于

远程触控板用于选择其他视图

编辑流派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);
            }
        });

解决方法

嗨,经过几天的严格试验和错误,我发现我的 XML 的父 LinearLayout 必须设置为

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

以及在我的情况下位于父级内部的元素,必须将 textview 定义为

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

我希望这个答案可以节省您的时间。

阿门

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...