简体   繁体   English

使用PageRow的leanback BrowseFragment的自定义标题

[英]Custom Headers for leanback BrowseFragment with PageRow

The code consists of a BrowseFragment that has multiple list rows associated to each header row, in reference to this code, i was able to implement it correctly using PageRow instead of ListRow ( https://github.com/googlesamples/leanback-showcase/blob/master/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/page/PageAndListRowFragment.java ) 该代码由一个BrowseFragment组成,该浏览器片段具有与每个标题行关联的多个列表行,参考此代码,我能够使用PageRow而不是ListRow( https://github.com/googlesamples/leanback-showcase/ blob / master / app / src / main / java / android / support / v17​​ / leanback / supportleanbackshowcase / app / page / PageAndListRowFragment.java

The problem is with this function that helps me customize the headers (add icon to the headers: 问题在于此功能可帮助我自定义标题(向标题添加图标:

在此处输入图片说明

browseFragment.setHeaderPresenterSelector(new PresenterSelector() {
        @Override
        public IconHeaderPresenter getPresenter(Object item) {
            return new IconHeaderPresenter();
        }

    });

Once I add it, the headers are no longer selected, and I can't navigate between them. 添加后,将不再选择标题,并且无法在它们之间导航。

This is how I am creating the browsefragment: 这是创建浏览片段的方式:

    ...     
    browseFragment = new BrowseFragment();
    browseFragment.setHeadersState(BrowseFragment.HEADERS_ENABLED);
    browseFragment.prepareEntranceTransition();
    browseFragment.setHeaderPresenterSelector(new PresenterSelector() {
        @Override
        public IconHeaderPresenter getPresenter(Object item) {
            return new IconHeaderPresenter();
        }

    });

    mBackgroundManager = BackgroundManager.getInstance(shared.main);
    mBackgroundManager.attach(shared.main.getWindow());
    browseFragment.getMainFragmentRegistry().registerFragment(IconPageRow.class,
            new PageRowFragmentFactory(mBackgroundManager));

... ...

private static class PageRowFragmentFactory extends BrowseFragment.FragmentFactory {
    private final BackgroundManager mBackgroundManager;

    PageRowFragmentFactory(BackgroundManager backgroundManager) {
        this.mBackgroundManager = backgroundManager;
    }

    @Override
    public Fragment createFragment(Object rowObj) {
        ArrayObjectAdapter adapter=((IconPageRow)rowObj).getAdapter();
        RowsFragment rowsFragment = new RowsFragment();
        rowsFragment.enableRowScaling(true);
        rowsFragment.setAdapter(adapter);
        mBackgroundManager.setDrawable(null);
        rowsFragment.setOnItemViewClickedListener(browseClickListener);
        rowsFragment.setOnItemViewSelectedListener(browseSelectedListener);
        return rowsFragment;
    }
}

The solution to this was to add to my Custom Header presenter (IconHeaderPresenter) in onCreateViewHolder these two lines: 解决方案是将这两行添加到我的自定义标题演示者(IconHeaderPresenter)中的onCreateViewHolder中:

view.setFocusable(true);
view.setFocusableInTouchMode(true);

In IconHeaderPresenter(). 在IconHeaderPresenter()中。

View view = inflater.inflate(R.layout.icon_header_item, null); 视图view = inflater.inflate(R.layout.icon_header_item,null);

icon_header_item.xml is as below: icon_header_item.xml如下:

<android.support.v17.leanback.widget.ImageCardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/fastlane_background"
    android:clickable="true"
    android:paddingBottom="20dp"
    android:contextClickable="true"
    android:orientation="vertical">
//your layout here
</android.support.v17.leanback.widget.ImageCardView>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM