Sunday, 13 March 2022

BrowseSupportFragment(Leanback): manually select mainfragment

I am building app for android tv but having issue on manually selecting main fragment. I want click on header item to change main fragment rather than changing on focus using fragment factory.

Code

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    isHeadersTransitionOnBackEnabled = true
    val listRowPresenter = ListRowPresenter(FocusHighlight.ZOOM_FACTOR_SMALL)
    mRowsAdapter = ArrayObjectAdapter(listRowPresenter)
    adapter = mRowsAdapter
    mainFragmentRegistry.registerFragment(PageRow::class.java, PageRowFragmentFactory())
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    loadData()
    headersSupportFragment.setOnHeaderViewSelectedListener { viewHolder, row ->
        //Only Focus View. Don't change main fragment
    }
    headersSupportFragment.setOnHeaderClickedListener { viewHolder, row ->
        //Change main fragment here
        //No documentation provided what to write here
    }
}

fun loadData() {
    val headerItem1 = HeaderItem(1, "HEADER_NAME_1")
    val pageRow1 = PageRow(headerItem1)
    mRowsAdapter.add(pageRow1)

    val headerItem2 = HeaderItem(2, "HEADER_NAME_2")
    val pageRow2 = PageRow(headerItem2)
    mRowsAdapter.add(pageRow2)
}

Factory

private class PageRowFragmentFactory : BrowseSupportFragment.FragmentFactory<Fragment>() {
    override fun createFragment(rowObj: Any?): Fragment {
        val row = rowObj as Row
        return when (row.headerItem.id) {
            1L -> SampleFragmentA()
            2L -> SampleFragmentB()
            else -> throw IllegalArgumentException(String.format("Invalid row %s", rowObj))
        }
    }
}


from BrowseSupportFragment(Leanback): manually select mainfragment

No comments:

Post a Comment