Android TV Leanback (七)(详情视图)

来源:互联网 发布:丅vb晚上7点播出剧集 编辑:程序博客网 时间:2024/05/18 03:47

创建一个详情presenter

Leanback library提供了视频浏览框架,你可以使用presenter控制数据在屏幕上的显示,包括视频详情。这个框架为止提供了AbstractDetailsDescriptionPresenter,你需要实现onBindDescription(),将数据与视图绑定。如下:

public class DetailsDescriptionPresenterextends AbstractDetailsDescriptionPresenter {    @Override    protected void onBindDescription(ViewHolder viewHolder, Object itemData) {        MyMediaItemDetails details = (MyMediaItemDetails) itemData;        // itemData包含视频的详细信息        //需要显示视频的详细信息        // viewHolder.getTitle().setText(details.getShortTitle());        // 使用静态数据测试:        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

使用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();        // 将视频详细信息的presenter附加到rowPresenter上        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");        // 给详情视图添加图片和操作        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);        // 添加相关项        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);    }}

创建详情Activity

创建一个activity包含DetailsFragment来显示详情。

创建布局:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"    android:name="com.example.android.mediabrowser.MediaItemDetailsFragment"    android:id="@+id/details_fragment"    android:layout_width="match_parent"    android:layout_height="match_parent"/>

创建Activity:

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

 
注册:

<application>  ...  <activity android:name=".DetailsActivity"    android:exported="true"    android:theme="@style/Theme.Leanback"/></application>

定义一个Listener监听每项的点击

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);                }            });    }}