【问题标题】:Check header item focus in BrowseFragment Android TV检查 BrowseFragment Android TV 中的标题项焦点
【发布时间】:2017-08-17 13:48:42
【问题描述】:

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

我正在使用 androidTV-leanback 库。

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

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

问题: 是否可以通过函数/插入您的解决方案获得标题项目焦点(项目名称/某种 id)?

我想知道每个用户移动的活动标题项目名称/ID。 例如 - “第 3 类”。

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

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

【问题讨论】:

    标签: android android-tv leanback


    【解决方案1】:

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

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

    【讨论】:

    • 这行得通。但奇怪的是,设置此侦听器会破坏通常的BrowseSupportFragment 行为(选择标题右侧的图块)。要解决这个问题,应该使用BrowseSupportFragment#setSelectedPosition(mCategoryRowAdapter.indexOf(row))
    【解决方案2】:

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

    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
            }
        }
    }
    

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

    希望对你有帮助:)

    【讨论】:

      【解决方案3】:

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


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

      【讨论】:

        猜你喜欢
        • 2016-04-26
        • 2020-10-11
        • 1970-01-01
        • 1970-01-01
        • 2017-01-07
        • 1970-01-01
        • 2017-03-09
        • 2017-03-09
        • 2016-01-15
        相关资源
        最近更新 更多