如何在 Android TV 中编写自定义 Leanbacks VerticalGridView?

How to write a custom Leanbacks VerticalGridView in Android TV?

我想将 Leanback 库的详细信息屏幕中的 Row 实现到自定义屏幕中。该行将是下面的行。我已经实施了 HorizontalGridView 并设法显示了项目。

我的布局:

<android.support.v17.leanback.widget.HorizontalGridView
android:id="@+id/detail_related"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

我的Java:

RecyclerView.Adapter mAdapter = new SimilarAssetsAdapter();
mBinding.detailRelated.setAdapter(mAdapter);

我遇到的问题是我无法专注于任何项目,而是专注于整体 HorizontalGridView。我该如何解决?

如果您的视图是自定义视图,请确保将以下内容添加到自定义视图中以获得焦点:

setFocusable(true);
setFocusableInTouchMode(true);

自定义视图中的问题是您需要将 java code.Add 适配器中的焦点更改监听器添加到适配器项的根视图中。

在适配器项目的 oncreate 中为根视图添加焦点。

yourView.setFocusable(true);      
yourView.setFocusableInTouchMode(true);

然后在onBind中添加focuschangeListener。

 yourRootView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {

        if(hasFocus){
           //focus gained
        }else {
          //focus lost
        }
    }
});

要解决此问题,请使用 VerticalGridView 而不是 HorizontalGridView

<android.support.v17.leanback.widget.VerticalGridView
    android:id="@+id/detail_related"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

要将 ArrayObjectAdapter 设置为 VerticalGridView,请使用 ItemBridgeAdapter

ItemBridgeAdapter adapter = new ItemBridgeAdapter();
adapter.setAdapter(mRowsAdapter);
adapter.setPresenter(new SinglePresenterSelector(new ListRowPresenter()));
mBinding.detailRelated.setAdapter(adapter);

试着放 android:descendantFocusability="afterDescendants" 在您的 .xml 文件中

<android.support.v17.leanback.widget.HorizontalGridView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:descendantFocusability="afterDescendants"/>