Android开发 - ListRow类TV中开发水平滚动视图解析
ListRow是什么
-
ListRow 是 Android TV 开发中的一个类,用于在应用的用户界面中显示水平滚动的项(如卡片、图像等)列表。它通常在一个 BrowseFragment 或 RowsFragment 中使用,以组织和显示内容
// 创建一个 BrowseFragment 实例 BrowseFragment browseFragment = new BrowseFragment(); // 创建一个 ArrayObjectAdapter,并使用 ListRowPresenter 作为呈现器 ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter()); // 创建一个 HeaderItem,代表行的标题 HeaderItem headerItem = new HeaderItem(0, "热门电影"); // 创建一个 ArrayObjectAdapter,用于 ListRow 的数据 ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new MoviePresenter()); // 添加电影数据到适配器 listRowAdapter.add(new Movie(R.drawable.poster1, "电影 1")); listRowAdapter.add(new Movie(R.drawable.poster2, "电影 2")); // 将适配器添加到 ListRow,并添加到 rowsAdapter ListRow listRow = new ListRow(headerItem, listRowAdapter); rowsAdapter.add(listRow); // 设置适配器到 BrowseFragment browseFragment.setAdapter(rowsAdapter);
ListRow的作用
-
容纳一个标题和一个水平列表:
-
每个 ListRow 通常包括一个标题(HeaderItem)和一个包含项的水平列表(ObjectAdapter)
ListRow listRow = new ListRow(headerItem, listRowAdapter);
-
-
适用于丰富的媒体应用:
- 在像 Netflix 或 Amazon Prime 这样的媒体应用中,ListRow 通常用于显示不同类别的电影或电视节目,每个类别(如'热门电影'和'推荐电影'可以水平滚动的栏目<列表>)对应一个 ListRow
-
提升用户体验:
- 通过将内容分组为水平滚动列表,用户可以轻松浏览不同的内容类别,而不需要在一个长垂直列表中滚动
ListRow的使用
代码示例解析
// 创建 HeaderItem:用于设置 ListRow 的标题
HeaderItem header = new HeaderItem(0, "My ListRow Title");
// 创建 ObjectAdapter 并添加项:用于存储和管理 ListRow 中的项
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new CardPresenter());//负责将数据项绑定到视图上
adapter.add(new MyItem("Item 1"));
adapter.add(new MyItem("Item 2"));
adapter.add(new MyItem("Item 3"));
// 创建 ListRow:将 HeaderItem 和 ObjectAdapter 关联在一起,形成一个带标题的水平列表
ListRow listRow = new ListRow(header, adapter);
// 将 ListRow 添加到 RowsAdapter 中
ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());// ListRowPresenter:用于显示 ListRow
rowsAdapter.add(listRow);
// 将 RowsAdapter 设置到 BrowseFragment 或 RowsFragment 中
browseFragment.setAdapter(rowsAdapter);
简单的例子应用
-
假设你在开发一个视频流媒体应用,有以下几个类别:推荐、最新电影 和 热门电视剧。你可以使用 ListRow 为每个类别创建一个水平滚动的列表
// 推荐 HeaderItem recommendedHeader = new HeaderItem(0, "Recommended"); ArrayObjectAdapter recommendedAdapter = new ArrayObjectAdapter(new CardPresenter()); recommendedAdapter.add(new Video("Video 1")); recommendedAdapter.add(new Video("Video 2")); ListRow recommendedRow = new ListRow(recommendedHeader, recommendedAdapter); // 最新电影 HeaderItem latestMoviesHeader = new HeaderItem(1, "Latest Movies"); ArrayObjectAdapter latestMoviesAdapter = new ArrayObjectAdapter(new CardPresenter()); latestMoviesAdapter.add(new Video("Movie 1")); latestMoviesAdapter.add(new Video("Movie 2")); ListRow latestMoviesRow = new ListRow(latestMoviesHeader, latestMoviesAdapter); // 热门电视剧 HeaderItem popularShowsHeader = new HeaderItem(2, "Popular Shows"); ArrayObjectAdapter popularShowsAdapter = new ArrayObjectAdapter(new CardPresenter()); popularShowsAdapter.add(new Video("Show 1")); popularShowsAdapter.add(new Video("Show 2")); ListRow popularShowsRow = new ListRow(popularShowsHeader, popularShowsAdapter); // 添加到 RowsAdapter ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter()); rowsAdapter.add(recommendedRow); rowsAdapter.add(latestMoviesRow); rowsAdapter.add(popularShowsRow); // 设置 Adapter 到 BrowseFragment browseFragment.setAdapter(rowsAdapter);
总结
ListRow 是一个非常有用的工具,用于在 Android TV 应用中显示水平滚动的列表。它能够帮助开发者组织内容,提高用户体验,使得用户可以轻松浏览不同类别的内容