Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何始终在RowsFragment中显示标题_Android_Android Fragments_Leanback - Fatal编程技术网

Android 如何始终在RowsFragment中显示标题

Android 如何始终在RowsFragment中显示标题,android,android-fragments,leanback,Android,Android Fragments,Leanback,我正在尝试创建一个类似于Youtube应用程序的Android电视应用程序。我正在利用图书馆来做这件事。现在,当我试图在RowsFragment中显示单个项目的标题时,问题出现了,即使RowsFragment没有焦点。下面是将数据集加载到browseFragment中的代码 private void loadRowsCustom() { adapter = new ArrayObjectAdapter(); int split = 3; int

我正在尝试创建一个类似于Youtube应用程序的Android电视应用程序。我正在利用图书馆来做这件事。现在,当我试图在
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");
    }
private void loadRowsCustom(){
适配器=新的ArrayObjectAdapter();
int split=3;
int rowsFragmentCount=videoList.size()/split+(videoList.size()%split!=0?1:0);
对于(int i=0;i
下面的屏幕截图描述了所需的和当前的实现:


对于那些面临类似问题的人,我终于找到了一种可以提供所需结果的方法。但为此,您可能需要获取
BrowseSupportFragment
的源代码,或者在中修改以下代码行。我知道这是一个有点黑客,但它得到的是理想的输出

对于BrowseFragment:
注意mRowsFragment.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);
        }
    }

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

mRowsFragment.setExpand(true)
但是在这种情况下,每次调用
onAttachedToWindow(…)
方法时(请参见
android.support.v17.leanback.app.RowsFragment
-
ItemBridgeAdapter.AdapterListener mBridgeAdapterListener
),您的标题都将被隐藏

最后一个解决方案,witch对我有效,它只是简单地覆盖RowsFragment实现中的
setExpand()
方法,如下所示:

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

你是如何解决这个问题的?请你解释一下,因为我想在我的电视应用程序中做类似的事情。它在我的情况下不起作用。。你能把你的代码放在Github上吗?因为这个方法是包私有的,不可访问,我们如何使用它呢?对于那些在正确阅读它之前就对它视而不见的人来说,这不仅仅是一个无意义的重写,
true
总是传递给超类“
setExpand
方法。这应标记为正确答案。
@Override
    public void setExpand(boolean expand) {
        super.setExpand(true);
    }