你的问题是:左右快速移动,焦点会跑到其它 RecyclerView 上.
其实这个问题,Leanback就已经解决了的.
VerticalGridView
leaback 简单的 Demo 数据.
final ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(new TestPresenterSelector());
ItemBridgeAdapter itemBridgeAdapter = new ItemBridgeAdapter(rowsAdapter);
hGridView.setAdapter(itemBridgeAdapter);
//
for (int i = 0; i < 30; i++) {
ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new AppItemPresenter(i));
List itemList = new ArrayList<>();
for (int j = 0; j < 30; j++) {
itemList.add("item" \+ j);
}
listRowAdapter.addAll(0, itemList);
HeaderItem settingHeader = new HeaderItem(i, "测试" \+ i);
ListRow listRow = new ListRow(i, settingHeader, listRowAdapter);
rowsAdapter.add(listRow);
// rowsAdapter.add("item" + i);
}
//
itemBridgeAdapter.notifyDataSetChanged();
到达右边的底部的时候,长按右键,焦点是不会下去的.
如何设置:
设置这个属性 setFocusOutAllowed(false, false) 左右的.
如果你不想 Item一直保持在中间,可以设置setFocusScrollStrategy 这个属性(FOCUS_SCROLL_ALIGNED, FOCUS_SCROLL_ITEM等).
为何?因为 Leanback 的 GridLayoutManager 的 onInterceptFocusSearch 进行了处理.
也处理了 放大遮挡问题,焦点搜索失败的问题 onFocusSearchFailed,也处理了焦点记忆问题 onAddFocusables.