1

我正在开发一个使用leanback 架构的应用程序,其中某个自定义视图没有使用远程的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);
            }
        });
4

1 回答 1

0

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

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

并且在我的情况下,父级内部的元素必须将 textview 定义为

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

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

阿门

于 2021-07-09T07:40:58.850 回答