控制具有不确定项目的ViewGroup之间的焦点顺序

时间:2016-03-11 10:23:29

标签: android android-recyclerview pagerslidingtabstrip android-tv

我有一个Android电视布局,如下图所示。

  1. 顶部有一个PagerSlidingTabStrip,数据从服务器中提取;
  2. 底部带有片段的ViewPager,每个片段都有一个水平的RecyclerView。
  3. 情境:

    当第一个标签( tab0 )获得焦点时,然后在向下>向右方向按下D-pad, item2 在RecyclerView中获得焦点,按预期工作;

    然后在向上方向按下D-pad, tab4 获得焦点,该焦点位于默认焦点搜索顺序之后。

    问题:

    我的问题是如何让 tab0 (最后关注标签)获得焦点而不是tab4。

    我知道我们可以通过为每个View指定哪个控件应该通过 nextFocusUp,nextFocusUp,nextFocusLeft,nextFocusRight 属性获得焦点来定义行为。但是如何控制ViewGroup中具有不确定项目的焦点顺序。

    enter image description here

1 个答案:

答案 0 :(得分:0)

我最终解决了问题,如下所述:

  1. PagerSlidingTabStrip;
  2. 中保留对最后一个焦点视图的引用
  3. 创建自定义ViewGroup,这是PagerSlidingTabStripViewPager的父视图;
  4. 覆盖dispatchKeyEvent

    中的ViewGroup方法
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (shouldInterceptDownKeyEvent(event) || shouldInterceptUpKeyEvent(event)) {
            if (mTabs.getLastFocusedView() != null) {
                mTabs.getLastFocusedView().requestFocus();
            }
            return true;
        }
        return super.dispatchKeyEvent(event);
    }