Android Studio V3.12环境下TV开发教程(七)建立详细信息视图

Android Studio V3.12环境下TV开发教程

(转自Android官网https://developer.android.com/training/tv/start)

文章源自:光谷佳武 https://blog.csdn.net/jiawuhan/article/details/80620174

建立详细信息视图

v17 leanback支持库提供的媒体浏览界面类包括用于显示有关媒体项目的附加信息(如描述或评论)以及对该项目采取措施(如购买或播放其内容)的类。

本课讨论如何为媒体项目详细信息创建演示者类,以及如何在用户选择媒体项目时扩展DetailsFragment类以实现媒体项目的详细信息视图。

注意:此处显示的实现示例使用额外的活动来包含DetailsFragment。但是,可以避免通过使用片段事务将当前的BrowseFragment替换为同一活动内的BrowseFragment来创建第二个活动。有关使用片段事务的更多信息,请参阅使用片段训练构建动态UI

建立一个细节主持人

在leanback库提供的媒体浏览框架中,您使用演示者对象来控制屏幕上的数据显示,包括媒体项目详细信息。该框架为此提供了AbstractDetailsDescriptionPresenter类,这是演示者对媒体项目详细信息的几乎完整的实现。您只需实现onBindDescription()方法将视图字段绑定到数据对象,如下面的代码示例所示:

public class DetailsDescriptionPresenter        extends AbstractDetailsDescriptionPresenter {    @Override    protected void onBindDescription(ViewHolder viewHolder, Object itemData) {        MyMediaItemDetails details = (MyMediaItemDetails) itemData;        // In a production app, the itemData object contains the information        // needed to display details for the media item:        // viewHolder.getTitle().setText(details.getShortTitle());        // Here we provide static data for testing purposes:        viewHolder.getTitle().setText(itemData.toString());        viewHolder.getSubtitle().setText("2014   Drama   TV-14");        viewHolder.getBody().setText("Lorem ipsum dolor sit amet, consectetur "                + "adipisicing elit, sed do eiusmod tempor incididunt ut labore "                + " et dolore magna aliqua. Ut enim ad minim veniam, quis "                + "nostrud exercitation ullamco laboris nisi ut aliquip ex ea "                + "commodo consequat.");    }}

扩展细节片段

使用DetailsFragment类显示媒体项目详细信息时,请扩展该类以提供其他内容,例如预览图像和媒体项目的操作。您还可以提供其他内容,例如相关媒体项目的列表。

以下示例代码演示了如何使用前一节中显示的演示者类来为正在查看的媒体项目添加预览图像和操作。此示例还显示了相关媒体项行的添加,该行显示在详细信息列表下方。

public class MediaItemDetailsFragment extends DetailsFragment {    private static final String TAG = "MediaItemDetailsFragment";    private ArrayObjectAdapter mRowsAdapter;    @Override    public void onCreate(Bundle savedInstanceState) {        Log.i(TAG, "onCreate");        super.onCreate(savedInstanceState);        buildDetails();    }    private void buildDetails() {        ClassPresenterSelector selector = new ClassPresenterSelector();        // Attach your media item details presenter to the row presenter:        FullWidthDetailsOverviewRowPresenter rowPresenter =            new FullWidthDetailsOverviewRowPresenter(                new DetailsDescriptionPresenter());        selector.addClassPresenter(DetailsOverviewRow.class, rowPresenter);        selector.addClassPresenter(ListRow.class,                new ListRowPresenter());        mRowsAdapter = new ArrayObjectAdapter(selector);        Resources res = getActivity().getResources();        DetailsOverviewRow detailsOverview = new DetailsOverviewRow(                "Media Item Details");        // Add images and action buttons to the details view        detailsOverview.setImageDrawable(res.getDrawable(R.drawable.jelly_beans));        detailsOverview.addAction(new Action(1, "Buy $9.99"));        detailsOverview.addAction(new Action(2, "Rent $2.99"));        mRowsAdapter.add(detailsOverview);        // Add a Related items row        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(                new StringPresenter());        listRowAdapter.add("Media Item 1");        listRowAdapter.add("Media Item 2");        listRowAdapter.add("Media Item 3");        HeaderItem header = new HeaderItem(0, "Related Items", null);        mRowsAdapter.add(new ListRow(header, listRowAdapter));        setAdapter(mRowsAdapter);    }}

创建一个细节活动

片段(如DetailsFragment必须包含在一个活动中才能用于显示。为您的详细信息视图创建一个活动,与浏览活动分开,使您可以使用Intent调用您的详细信息视图。本节介绍如何构建一个活动来包含您的媒体项目的详细视图实现。

通过构建引用您的DetailsFragment实现的布局来开始创建细节活动:

android:name="com.example.android.mediabrowser.MediaItemDetailsFragment"    android:id="@+id/details_fragment"    android:layout_width="match_parent"    android:layout_height="match_parent"/>

接下来,创建一个使用前面代码示例中显示的布局的活动类:

public class DetailsActivity extends Activity{    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.details);    }}

最后,将这个新的活动添加到清单。请记住应用Leanback主题以确保用户界面与媒体浏览活动一致:

  ...

  android:theme="@style/Theme.Leanback"/>

为点击的项目定义一个侦听器

在实现了DetailsFragment,修改主媒体浏览视图以在用户单击媒体项目时移至您的详细信息视图。为了启用此行为,请将一个OnItemViewClickedListener对象添加到OnItemViewClickedListener,该对象触发了启动项目详细信息活动的意图。

以下示例显示了如何在用户单击主媒体浏览活动中的媒体项时实现侦听器以启动详细信息视图:

public class BrowseMediaActivity extends Activity {    ...    @Override    protected void onCreate(Bundle savedInstanceState) {        ...        // create the media item rows        buildRowsAdapter();        // add a listener for selected items        mBrowseFragment.OnItemViewClickedListener(            new OnItemViewClickedListener() {                @Override                public void onItemClicked(Object item, Row row) {                    System.out.println("Media Item clicked: " + item.toString());                    Intent intent = new Intent(BrowseMediaActivity.this,                            DetailsActivity.class);                    // pass the item information                    intent.getExtras().putLong("id", item.getId());                    startActivity(intent);                }            });    }}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,757评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,478评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,540评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,593评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,903评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,329评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,659评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,383评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,055评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,337评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,864评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,227评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,820评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,999评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,750评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,365评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,260评论 2 258

推荐阅读更多精彩内容