昨天的練習做完之後是 一個 Category 對上 一行 Row
今天我們要來練習 一個 Category 對上 一個 RowsSupportFragment
所以這樣就是左邊每選到一個 Category 右邊就會換掉整頁的 RowsSupportFragment 喔
有的昨天的基礎之後
今天應該可以融會貫通知道我們會多一層 ArrayObjectAdapter 來做今天的實作
先下載一下今天的 Json 吧,也是多了一層喔
不好意思大家
讓大家久等了
目前這個主題有點卡關
卡關的點在於目前 androidx 的 leanback library 中的 BrowseSupportFragment 無法達成這個結果
但是若使用已被棄用的 BrowseFragment 的話是可以完成的
這邊也給大家一個可以 Work 的範例來研究一下
連結在此
等研究出來會再回來補充這篇喔
不好意思大家~~
我回來了大家
不知道大家有沒有離去
我已經解掉這個問題囉
先跟大家說一下我之前錯誤的構思
以下是我原本以為可以執行的程式碼
fun init(){
val mainAdapter: ArrayObjectAdapter = ArrayObjectAdapter()
if(mMovieList!=null){
mMovieListData = mMovieList!!.data
if(mMovieListData!=null && mMovieListData!!.isNotEmpty()){
for((categoryIndex, category) in mMovieListData!!.withIndex()){
val rowsAdapter: ArrayObjectAdapter = ArrayObjectAdapter(ListRowPresenter())
val categoryName: String? = category.category_name
if(BuildConfig.DEBUG) Log.w(TAG, "categoryName: $categoryName")
val subCategoryList: List<SubCategory>? = category.sub_categories
if(subCategoryList!=null && subCategoryList.isNotEmpty()){
for ((subCategoryIndex, subCategory) in subCategoryList.withIndex()){
val subCategoryName: String? = subCategory.sub_category_name
if(BuildConfig.DEBUG) Log.d(TAG, "subCategoryName: $subCategoryName")
val items: List<Item>? = subCategory.items
val listRowAdapter: ArrayObjectAdapter = ArrayObjectAdapter(CustomCardPresenter())
if(items!=null && items.isNotEmpty()){
for(item in items){
if(BuildConfig.DEBUG) Log.i(TAG, "movieName: ${item.name}")
listRowAdapter.add(item)
}
val header: HeaderItem = HeaderItem(0, subCategoryName)
rowsAdapter.add(ListRow(header, listRowAdapter))
}
}
}
// 新增 fragmentAdapter
val fragmentAdapter: ArrayObjectAdapter = ArrayObjectAdapter()
val rowsSupportFragment: RowsSupportFragment = RowsSupportFragment()
rowsSupportFragment.adapter = rowsAdapter
fragmentAdapter.add(rowsSupportFragment)
val header: HeaderItem = HeaderItem(0, categoryName)
mainAdapter.add(ListRow(header, fragmentAdapter))
}
}
}
adapter = mainAdapter
if(activity!=null){
//左側 HeaderSupportFragment 的背景
brandColor = ContextCompat.getColor(activity!!, R.color.header_background)
//右側右上方 icon
badgeDrawable = ContextCompat.getDrawable(activity!!, R.drawable.vscinemas_logo)
}
}
新增 fragmentAdapter 這段是我以前 2017 年的專案可以 Work 的程式碼
但我忽略了一個事情就是,之前的專案為了做許多客製化的東西,把 BrowsFragment、RowsFragment 等等原始程式碼通通都拉出來到專案裡頭了,以至於官方在後面有更新了什麼東西舊的專案都不會跟著更新,所以造成舊的可以新的不行這種狀況
言歸正傳
那新的 leanback library 要如何做到這種效果呢
我在 Day 21 - PageRow 會詳細介紹喔~