我想在Row
库的详细信息屏幕中将Leanback
实现为自定义屏幕。该行将是下面的那一行。我已经实现了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
。我该如何解决这个问题?
答案 0 :(得分:0)
如果您的视图是自定义视图,请确保将以下内容添加到自定义视图中以获得焦点:
setFocusable(true);
setFocusableInTouchMode(true);
答案 1 :(得分:0)
自定义视图中的问题是您需要在java代码中添加焦点更改侦听器。将适配器内的焦点侦听器添加到适配器项的根视图。
在适配器项的oncreate中为rootview添加焦点。
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
}
}
});
答案 2 :(得分:0)
要解决此问题,请使用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);
答案 3 :(得分:0)
试着放
android:descendantFocusability="afterDescendants"
在您的 .xml
文件
<android.support.v17.leanback.widget.HorizontalGridView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="afterDescendants"/>