Android Studio V3.12環(huán)境下TV開發(fā)教程(七)建立詳細(xì)信息視圖

Android Studio V3.12環(huán)境下TV開發(fā)教程

(轉(zhuǎn)自Android官網(wǎng)https://developer.android.com/training/tv/start)

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

建立詳細(xì)信息視圖

v17 leanback支持庫提供的媒體瀏覽界面類包括用于顯示有關(guān)媒體項目的附加信息(如描述或評論)以及對該項目采取措施(如購買或播放其內(nèi)容)的類。

本課討論如何為媒體項目詳細(xì)信息創(chuàng)建演示者類,以及如何在用戶選擇媒體項目時擴(kuò)展DetailsFragment類以實(shí)現(xiàn)媒體項目的詳細(xì)信息視圖。

注意:此處顯示的實(shí)現(xiàn)示例使用額外的活動來包含DetailsFragment。但是,可以避免通過使用片段事務(wù)將當(dāng)前的BrowseFragment替換為同一活動內(nèi)的BrowseFragment來創(chuàng)建第二個活動。有關(guān)使用片段事務(wù)的更多信息,請參閱使用片段訓(xùn)練構(gòu)建動態(tài)UI。

建立一個細(xì)節(jié)主持人

在leanback庫提供的媒體瀏覽框架中,您使用演示者對象來控制屏幕上的數(shù)據(jù)顯示,包括媒體項目詳細(xì)信息。該框架為此提供了AbstractDetailsDescriptionPresenter類,這是演示者對媒體項目詳細(xì)信息的幾乎完整的實(shí)現(xiàn)。您只需實(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.");? ? }}

擴(kuò)展細(xì)節(jié)片段

使用DetailsFragment類顯示媒體項目詳細(xì)信息時,請擴(kuò)展該類以提供其他內(nèi)容,例如預(yù)覽圖像和媒體項目的操作。您還可以提供其他內(nèi)容,例如相關(guān)媒體項目的列表。

以下示例代碼演示了如何使用前一節(jié)中顯示的演示者類來為正在查看的媒體項目添加預(yù)覽圖像和操作。此示例還顯示了相關(guān)媒體項行的添加,該行顯示在詳細(xì)信息列表下方。

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

創(chuàng)建一個細(xì)節(jié)活動

片段(如DetailsFragment必須包含在一個活動中才能用于顯示。為您的詳細(xì)信息視圖創(chuàng)建一個活動,與瀏覽活動分開,使您可以使用Intent調(diào)用您的詳細(xì)信息視圖。本節(jié)介紹如何構(gòu)建一個活動來包含您的媒體項目的詳細(xì)視圖實(shí)現(xiàn)。

通過構(gòu)建引用您的DetailsFragment實(shí)現(xiàn)的布局來開始創(chuàng)建細(xì)節(jié)活動:

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

接下來,創(chuàng)建一個使用前面代碼示例中顯示的布局的活動類:

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

最后,將這個新的活動添加到清單。請記住應(yīng)用Leanback主題以確保用戶界面與媒體瀏覽活動一致:

? ...

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

為點(diǎn)擊的項目定義一個偵聽器

在實(shí)現(xiàn)了DetailsFragment,修改主媒體瀏覽視圖以在用戶單擊媒體項目時移至您的詳細(xì)信息視圖。為了啟用此行為,請將一個OnItemViewClickedListener對象添加到OnItemViewClickedListener,該對象觸發(fā)了啟動項目詳細(xì)信息活動的意圖。

以下示例顯示了如何在用戶單擊主媒體瀏覽活動中的媒體項時實(shí)現(xiàn)偵聽器以啟動詳細(xì)信息視圖:

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容