【问题标题】:how to always show headers in RowsFragment如何始终在 RowsFragment 中显示标题
【发布时间】:2016-02-02 11:05:22
【问题描述】:

我正在尝试创建一个类似于 Youtube 应用程序的 Android 电视应用程序。我正在使用Sofa 库来做到这一点。现在问题来了,当我试图在RowsFragment 中显示单个项目的标题时,即使RowsFragment 没有焦点。以下是将数据集加载到browseFragment的代码

private void loadRowsCustom() {
        adapter = new ArrayObjectAdapter();

        int split = 3;
        int rowsFragmentCount = videoList.size() / split + (videoList.size() % split != 0 ? 1 : 0);

        for (int i = 0; i < rowsFragmentCount; i++) {

            ListRowPresenter lrp = new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_LARGE);
            ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(lrp);

            String category = "Category";

            for (int j = 0; j < split && (i * split + j) < videoList.size(); j++) {
                Video[] videos = videoList.get(i * split + j);
                ArrayObjectAdapter rowCollAdapter = new ArrayObjectAdapter(new VideoPresenter());
                rowCollAdapter.addAll(0, Arrays.asList(videos));
                ListRow row = new ListRow(new HeaderItem(videos[0].category),rowCollAdapter);
                rowsAdapter.add(row);
                category = videos[0].category;
            }

            ArrayObjectAdapter fragmentAdapter = new ArrayObjectAdapter();
            RowsSupportFragment rowsSupportFragment = new RowsSupportFragment();
            rowsSupportFragment.setAdapter(rowsAdapter);
            rowsSupportFragment.enableRowScaling(false);
            fragmentAdapter.add(rowsSupportFragment);
            adapter.add(new ListRow(new HeaderItem(category), fragmentAdapter));
        }

        browseSupportFragment.setAdapter(adapter);
        browseSupportFragment.setHeadersState(BrowseSupportFragment.HEADERS_ENABLED);
        browseSupportFragment.setOnSearchClickedListener(searchClickListener);
        browseSupportFragment.setOnItemViewClickedListener(browseClickListener);
        browseSupportFragment.setTitle("Google Videos");
    }

所需的和当前的实现如下面的屏幕截图所示:

【问题讨论】:

    标签: android android-fragments leanback


    【解决方案1】:

    正如 Mayur Kaul 已经提到的,你只需要打电话

    mRowsFragment.setExpand(true)
    

    但在这种情况下,每次调用 onAttachedToWindow(...) 方法时(请参阅 android.support.v17.leanback.app.RowsFragment - ItemBridgeAdapter.AdapterListener mBridgeAdapterListener),您的标题标题无论如何都会被隐藏。

    所以最终的解决方案,女巫为我工作,它只是简单地覆盖您的 RowsFragment 实现中的 setExpand() 方法,如下所示:

    @Override
        public void setExpand(boolean expand) {
            super.setExpand(true);
        }
    

    【讨论】:

    • 对于那些像我一样在正确阅读之前就对它视而不见的人 - 这不仅仅是一个毫无意义的覆盖,true 总是传递给超类的setExpand 方法。这应该被标记为正确答案。
    【解决方案2】:

    对于那些面临类似问题的人,我终于设法找到了一个可以提供预期结果的 hack。但为此,您可能需要获取BrowseSupportFragmentSofa 的源代码并修改以下代码行。我知道它有点 hack,但它得到了想要的输出。

    对于 BrowseFragment:Notice the mRowsFragment.setExpand(true)

    private void showHeaders(boolean show) {
            if (DEBUG) Log.v(TAG, "showHeaders " + show);
            mHeadersFragment.setHeadersEnabled(show);
            setHeadersOnScreen(show);
            setRowsAlignedLeft(!show);
            if (mRowsFragment != null) {
                mRowsFragment.setExpand(true);
            } else if (mCurrentFragment != null && mCurrentFragment instanceof RowsFragment) {
                ((RowsFragment) mCurrentFragment).setExpand(true);
            }
        }
    

    BrowseSupportFragment 也是如此

    private void showHeaders(boolean show) {
            if (DEBUG) Log.v(TAG, "showHeaders " + show);
            mHeadersSupportFragment.setHeadersEnabled(show);
            setHeadersOnScreen(show);
            setRowsAlignedLeft(!show);
            if (mRowsSupportFragment != null) {
                mRowsSupportFragment.setExpand(true);
            } else if (mCurrentFragment != null && mCurrentFragment instanceof RowsSupportFragment) {
                ((RowsSupportFragment) mCurrentFragment).setExpand(true);
            }
        }
    

    【讨论】:

    • 你是如何解决这个问题的?请你解释一下,因为我想在我的电视应用程序中做类似的事情。
    • 在我的情况下它不起作用.. 你能把你的代码放在 Github 上吗?
    • 由于该方法是包私有的且不可访问,我们如何使用它?
    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    相关资源
    最近更新 更多