浏览支持 Leanback 的安卓应用的内容


浏览支持 Leanback 的安卓应用的内容

上次更新时间:2016 年 9 月。

在我们启动新创建的安卓电视应用(使用 Android Studio 应用向导构建)后,我们将看到一个与下图非常类似的界面:

一旦您启动您的安卓电视应用,就会看到一个与此类似的界面。

我们在这个活动中看到的所有内容都是在一个名为 BrowseFragment 的类中生成的。BrowseFragment 创建了一个界面,允许用户轻松浏览应用中的内容,通常是视频或电影。

BrowseFragment 本身实际上由两个子片段组成:HeadersFragment 和 RowsFragment。

altBrowseFragment 本身实际上由两个子片段组成:HeadersFragment 和 RowsFragment。alt

HeadersFragment 显示每一行内容的标题,并且它可以显示或隐藏。通常,它包含该特定行中包含的内容的“类别”。

RowsFragment 包含内容行,通常显示为视频缩略图。我们将查看如何使用 ObjectAdapters 填充这些内容行。

填充 BrowseFragment

内容行是通过 Adapters 填充的水平列表,这些列表使用专门用于定义名为 Presenters 的应用的外观和风格的类来排列内容。

为了填充单行内容,您将使用称为 listRowAdapter 的 ArrayObjectAdapter。此适配器将负责显示单行的内容。

在这个例子中,我们还假设我们定义了一个名为“movie”的类,其中包含电影的所有信息,如标题和描述。

最后,我们有一个 HeaderItem,您将用它来定义行标题。例如,您可以定义“comedy”类别。

以下是 listRowAdapter 和 HeaderItem 的可视化表示形式:

altlistRowAdapter 和 HeaderItem 的可视化表示形式。alt

假设我们有一个方法“SetupMovies”,它将填充一个电影列表,然后您可以将该列表传递给 Adapter。下面的代码是您将用来填充单行并定义标头项目的代码。

已复制到剪贴板。

public class MainFragment extends BrowseFragment {

    private void loadRows() {

	//让我们生成影片列表
        List list = MovieList.setupMovies();

//CardPresenter 定义行中项目的 UI
CardPresenter cardPresenter = new CardPresenter();

//创建行的适配器
        ArrayObjectAdapter listRowAdapter
                             = new ArrayObjectAdapter(cardPresenter);

	//让我们填充适配器
	for (Movie movie:list) {
            listRowAdapter.add(movie);
        }

        //创建此行的标题    
        HeaderItem header = new HeaderItem(0, "Comedy");

通常,媒体流应用将具有多行内容。所以,您需要向 BrowseFragment 中添加多个适配器。最简单的方法是拥有一个可以管理多个 ListrowAdapter 的更高级别的 Adapter。您可以调用这个 RowsAdapter 类。

RowsAdapter 将包含多个 ListRowAdapter,并将拥有自己的 Presenter 来定义内容行的显示方式。

RowsAdapter 将包含多个 ListRowAdapter,并将拥有自己的 Presenter 来定义内容行的显示方式。

您将通过添加多个 listRow 来填充 RowsAdapter,以组合 listRowAdapter 和相对 HeaderItem。为此,您可以使用 ListRow 类来接收 HeaderItem 和 ArrayObjectAdapter 作为参数。

已复制到剪贴板。

public class MainFragment extends BrowseFragment {
 ...

     //创建一个 RowsAdapter
     ArrayObjectAdapter rowsAdapter
		= new ArrayObjectAdapter(new ListRowPresenter());

     //添加多行  
     rowsAdapter.add(new ListRow(headerItem1, listRowAdapter1));
     rowsAdapter.add(new ListRow(headerItem2, listRowAdapter2));


     setAdapter(mRowsAdapter);

当您调用 setAdapter 时,您将填充 BrowseFragment 中的所有行,它将显示主界面。

一旦您启动您的安卓电视应用,就会看到一个与此类似的界面。