在BrowseFragment Android TV中检查标题项焦点

时间:2017-08-17 13:48:42

标签: android android-tv leanback

构建我的第一个Android TV应用程序并且有点困惑。

我正在使用androidTV-leanback库。

根本问题:我有两个功能。一个用于返回上一个片段(使用popBackStackImmediate();),另一个用于creatingLayout();。两者都有效,但布局比我返回MainFragment(我可以看到导航抽屉)更快,这使得 BIG DELAY

我的解决方案(在想法中):当我获得特定导航抽屉标题项的焦点时,我可以简单地调用creatingLayout();

问题: 是否可以获得标题项焦点(项目名称/某种ID) - 按功能/ 插入您的解决方案

我想知道每个用户移动活动标题项名称/ ID。 例如 - "类别3"。

https://i.imgur.com/YMv6JjU.png

这是正确思考我的问题吗?也许我可以使用另一种方法吗?

3 个答案:

答案 0 :(得分:1)

通过在BrowseFragment中设置侦听器,当HeadersFragment项目(导航菜单项)获得焦点时,您会收到回调:

getHeadersSupportFragment().setOnHeaderViewSelectedListener(
    new HeadersSupportFragment.OnHeaderViewSelectedListener() {
        @Override
        public void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row) {
            Toast.makeText(getActivity(), row.getHeaderItem().getName(), Toast.LENGTH_LONG).show();
        }
    }
);

答案 1 :(得分:0)

如果我正确理解您的问题,您想知道用户选择的特定类别的时间。在这种情况下,您可以检查您在主片段中设置的选定侦听器,如下所示:

private final class ItemViewSelectedListener implements OnItemViewSelectedListener {
    @Override
    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
                               RowPresenter.ViewHolder rowViewHolder, Row row) {
        ListRow listRow = (ListRow)row;
        if(listRow.getId() == 4)
        {
            //do something
        }
    }
}

你可以在将listrows添加到BrowserFragment ArrayAdpator时设置id,然后像我上面所说的那样检查它。

希望它有所帮助:)

答案 2 :(得分:0)

这就是我最终让它在最新的 BrowseSupportFragment 上工作的方式,将它放在 onItemViewSelectedListener 中。


   getHeadersSupportFragment().setOnHeaderViewSelectedListener(
                (viewHolder, row1) -> {
                    if (viewHolder.view.hasFocus()){
                        //Do stuff here
                    }else{
                        //Do other stuff here
                    }
                    setSelectedPosition(mRowsAdapter.indexOf(row1));
                }
        );