W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
編寫:huanglizhuo - 原文:http://developer.android.com/training/tv/playback/details.html
待認(rèn)領(lǐng)進(jìn)行編寫,有意向的小伙伴,可以直接修改對應(yīng)的markdown文件,進(jìn)行提交!
v17 leanback support library 庫提供的媒體瀏覽接口包含顯示附加媒體信息的類,比如描述和預(yù)覽,以及對項(xiàng)目的操作,比如購買或播放。
這節(jié)課討論如何為媒體項(xiàng)目的詳細(xì)信息創(chuàng)建 presenter 類,以及用戶選擇一個媒體項(xiàng)目時如何擴(kuò)展 DetailsFragment類來實(shí)現(xiàn)顯示媒體詳細(xì)信息視圖。
小貼士: 這里的實(shí)現(xiàn)例子用的是包含 DetailsFragment的附加activity。但也可以在同一個 activity 中用 fragment 轉(zhuǎn)換將 BrowseFragment替換為 DetailsFragment.更多關(guān)于fragment的信息請參考Building a Dynamic UI with Fragments
在leanback庫提供的媒體瀏覽框架中,可以用presenter對象控制屏幕顯示數(shù)據(jù),包括媒體詳細(xì)信息。AbstractDetailsDescriptionPresenter 類提供的框架幾乎是媒體項(xiàng)目詳細(xì)信息的完全繼承。我們只需要實(shí)現(xiàn)onBindDescription()方法,像下面這樣把數(shù)據(jù)信息和視圖綁定起來。
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.");
}
}
當(dāng)使用 DetailsFragment類顯示我們的媒體項(xiàng)目詳細(xì)信息時,擴(kuò)展該類并提供像預(yù)覽圖片,操作等附加內(nèi)容。我們也可以提供一系列的相關(guān)媒體信息。
下面的例子演示了怎樣用presenter類為媒體項(xiàng)目添加預(yù)覽圖片和操作。這個例子也演示了添加相關(guān)媒體行。
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:
DetailsOverviewRowPresenter rowPresenter =
new DetailsOverviewRowPresenter(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這樣的 fragment 為了使用或顯示必須包含activity。為我們的詳細(xì)信息與瀏覽分開創(chuàng)建activity并通過傳遞Intent打開。這節(jié)演示了如何創(chuàng)建一個包含媒體詳細(xì)信息的activity。
創(chuàng)建詳細(xì)信息前先為 DetailsFragment創(chuàng)建一個布局文件:
<!-- file: res/layout/details.xml -->
<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"
/>
接下來用上面的布局文件創(chuàng)建一個activity:
public class DetailsActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.details);
}
}
最后在manifest文件中申明activity。記得添加Leanback主題以確保用戶界面中有媒體瀏覽activity。
<application>
...
<activity android:name=".DetailsActivity"
android:exported="true"
android:theme="@style/Theme.Leanback"/>
</application>
實(shí)現(xiàn) DetailsFragment后,在用戶點(diǎn)擊媒體條目時將我們的媒體瀏覽view切換詳細(xì)信息view。為了確保動作的實(shí)現(xiàn),在BrowserFragment中添加[OnItemViewClickedListener]通過Intent開啟詳細(xì)信息activity。
下面的例子演示了實(shí)現(xiàn)怎樣在媒體瀏覽view中實(shí)現(xiàn)一個 listener開啟詳細(xì)信息view。
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);
}
});
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: