AndroidTV-自定义X行数的ListRow。焦点丢失

AndroidTV-自定义X行数的ListRow。焦点丢失,android,focus,android-tv,leanback,Android,Focus,Android Tv,Leanback,我在我的Android TV项目中使用Leanback库。我想自定义ListRow,以便更改要显示的内容行的数量(默认值为1) 我遵循指南: 我想到的是: class CustomListRowPresenter : ListRowPresenter() { override fun onBindRowViewHolder(holder: RowPresenter.ViewHolder, item: Any) { /* This two line codes changes the n

我在我的Android TV项目中使用Leanback库。我想自定义ListRow,以便更改要显示的内容行的数量(默认值为1)

我遵循指南:

我想到的是:

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
}

}
以及:


请找到我的java代码

此处mainList包含标题名称和将添加到特定标题下的数据列表

在我的场景中,我希望一行有10个数据,因此,对于j的forloop,我已经管理了这一点,并且在同一标题下添加了多行数据

for (int i = 0; i < mainList.size(); i++) {
    ArrayList<HashMap<String,String>> listDataMap = (ArrayList<HashMap<String,String>>) mainList.get(i).get("dataList");

    if(!listDataMap.isEmpty()){
        CardPresenter cardPresenter = new CardPresenter();

        String categoryName = (String) mainList.get(i).get("categoryName");
        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);

        List<Movie> list = MovieList.setupGames(listDataMap,i+2);
        for (int j = 1; j <= listDataMap.size(); j++) {
            listRowAdapter.add(list.get(j-1));
            if (j%10 == 0){
                HeaderItem header = new HeaderItem( categoryName);
                mAdapter.add(new ListRow(header, listRowAdapter));
                categoryName = "";
                listRowAdapter = new ArrayObjectAdapter(cardPresenter);
            }else if ( j ==  listDataMap.size() ){
                HeaderItem header = new HeaderItem( categoryName);
                mAdapter.add(new ListRow(header, listRowAdapter));
            }
        }
    }
}
for(int i=0;i对于(int j=1;j因此,您希望在行单元格中显示多行内容,并且需要自定义单元格右??我想自定义ListRow,但由于Leanback库的限制,我认为这是不可能的。任何其他解决方案都会很有趣。您是否可以共享您希望作为输出的内容的图像..因为我有在列表和行单元格中做了一些更改..所以可能会对您有所帮助..您只需要大OBJ(标题1)然后是一些行。标题2再次是一些多行?有了这些焦点,应该可以完美地工作?如果我错了,请纠正我。是的,差不多。
BIG-OBJ:
    title: "1"
    list-of-small-objs: small1, small2, small3
BIG-OBJ2:
    title: "2"
    list-of-small-objs: small1, small2, small3
...
for (int i = 0; i < mainList.size(); i++) {
    ArrayList<HashMap<String,String>> listDataMap = (ArrayList<HashMap<String,String>>) mainList.get(i).get("dataList");

    if(!listDataMap.isEmpty()){
        CardPresenter cardPresenter = new CardPresenter();

        String categoryName = (String) mainList.get(i).get("categoryName");
        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);

        List<Movie> list = MovieList.setupGames(listDataMap,i+2);
        for (int j = 1; j <= listDataMap.size(); j++) {
            listRowAdapter.add(list.get(j-1));
            if (j%10 == 0){
                HeaderItem header = new HeaderItem( categoryName);
                mAdapter.add(new ListRow(header, listRowAdapter));
                categoryName = "";
                listRowAdapter = new ArrayObjectAdapter(cardPresenter);
            }else if ( j ==  listDataMap.size() ){
                HeaderItem header = new HeaderItem( categoryName);
                mAdapter.add(new ListRow(header, listRowAdapter));
            }
        }
    }
}