我正在使用Leanback库开发我的Android TV项目。我希望能够自定义ListRow,以便我可以更改要显示的内容行数(默认为1)。
我遵循了指南:https://corochann.com/browsefragment-listrow-customization-android-tv-application-hands-on-tutorial-18-705.html。
我创建的代码如下:
所以,一切都很好。我得到了想要的行,但有一个问题。例如,如果我想显示两行,那么它可以完美地工作。如果我想显示超过2行(这样您就不会在视图中看到第二个customListRow),它没有焦点。基本上,如果我有两行以上,并且尝试从左到右移动到底部到顶部,焦点仅在前两行上完美工作。这可能是什么原因,如何修复?
期望输出: 数据:
我遵循了指南:https://corochann.com/browsefragment-listrow-customization-android-tv-application-hands-on-tutorial-18-705.html。
我创建的代码如下:
class CustomListRowPresenter : ListRowPresenter() {
override fun onBindRowViewHolder(holder: RowPresenter.ViewHolder, item: Any) {
/* This two line codes changes the number of rows of ListRow */
val numRows = (item as CustomListRow).numRows
(holder as ListRowPresenter.ViewHolder).gridView.setNumRows(numRows)
super.onBindRowViewHolder(holder, item)
}
override fun initializeRowViewHolder(holder: RowPresenter.ViewHolder) {
super.initializeRowViewHolder(holder)
/* Disable Shadow */
shadowEnabled = false
}
companion object {
private val TAG = CustomListRowPresenter::class.java.simpleName
}
}
class CustomListRow : ListRow {
var numRows = 1
constructor(header: HeaderItem, adapter: ObjectAdapter) : super(header, adapter) {}
constructor(id: Long, header: HeaderItem, adapter: ObjectAdapter) : super(id, header, adapter) {}
constructor(adapter: ObjectAdapter) : super(adapter) {}
companion object {
private val TAG = CustomListRow::class.java.simpleName
}
}
同时:
override onCreate() {
val adapter = SparseArrayObjectAdapter(CustomListRowPresenter())
setAdapter(adapter)
}
private fun setContent(content: List<Data>) {
content.forEachIndexed { index, data ->
val position = index.toLong()
val headerItem = HeaderItem(position, data.title)
val presenterSelector = getMediaObjectPresenterSelector()
val dataAdapter = ArrayObjectAdapter(presenterSelector)
val listRow = CustomListRow(position, headerItem, dataAdapter)
data.content.forEach { x ->
dataAdapter.add(x)
}
listRow.numRows = 5
dataAdapters.add(dataAdapter)
adapter.set(position.toInt(), listRow)
}
refresh()
}
所以,一切都很好。我得到了想要的行,但有一个问题。例如,如果我想显示两行,那么它可以完美地工作。如果我想显示超过2行(这样您就不会在视图中看到第二个customListRow),它没有焦点。基本上,如果我有两行以上,并且尝试从左到右移动到底部到顶部,焦点仅在前两行上完美工作。这可能是什么原因,如何修复?
期望输出: 数据:
BIG-OBJ:
title: "1"
list-of-small-objs: small1, small2, small3
BIG-OBJ2:
title: "2"
list-of-small-objs: small1, small2, small3
...