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

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

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

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

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

v17 leanback支持庫(kù)提供的媒體瀏覽界面類(lèi)包括用于顯示有關(guān)媒體項(xiàng)目的附加信息(如描述或評(píng)論)以及對(duì)該項(xiàng)目采取措施(如購(gòu)買(mǎi)或播放其內(nèi)容)的類(lèi)。

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

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

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

在leanback庫(kù)提供的媒體瀏覽框架中,您使用演示者對(duì)象來(lái)控制屏幕上的數(shù)據(jù)顯示家卖,包括媒體項(xiàng)目詳細(xì)信息眨层。該框架為此提供了AbstractDetailsDescriptionPresenter類(lèi),這是演示者對(duì)媒體項(xiàng)目詳細(xì)信息的幾乎完整的實(shí)現(xiàn)上荡。您只需實(shí)現(xiàn)onBindDescription()方法將視圖字段綁定到數(shù)據(jù)對(duì)象趴樱,如下面的代碼示例所示:

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類(lèi)顯示媒體項(xiàng)目詳細(xì)信息時(shí),請(qǐng)擴(kuò)展該類(lèi)以提供其他內(nèi)容酪捡,例如預(yù)覽圖像和媒體項(xiàng)目的操作叁征。您還可以提供其他內(nèi)容,例如相關(guān)媒體項(xiàng)目的列表逛薇。

以下示例代碼演示了如何使用前一節(jié)中顯示的演示者類(lèi)來(lái)為正在查看的媒體項(xiàng)目添加預(yù)覽圖像和操作捺疼。此示例還顯示了相關(guān)媒體項(xiàng)行的添加,該行顯示在詳細(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)建一個(gè)細(xì)節(jié)活動(dòng)

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

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

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

接下來(lái)羞福,創(chuàng)建一個(gè)使用前面代碼示例中顯示的布局的活動(dòng)類(lèi):

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

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

? ...

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

為點(diǎn)擊的項(xiàng)目定義一個(gè)偵聽(tīng)器

在實(shí)現(xiàn)了DetailsFragment治专,修改主媒體瀏覽視圖以在用戶(hù)單擊媒體項(xiàng)目時(shí)移至您的詳細(xì)信息視圖卖陵。為了啟用此行為,請(qǐng)將一個(gè)OnItemViewClickedListener對(duì)象添加到OnItemViewClickedListener张峰,該對(duì)象觸發(fā)了啟動(dòng)項(xiàng)目詳細(xì)信息活動(dòng)的意圖泪蔫。

以下示例顯示了如何在用戶(hù)單擊主媒體瀏覽活動(dòng)中的媒體項(xiàng)時(shí)實(shí)現(xiàn)偵聽(tīng)器以啟動(dòng)詳細(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)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挟炬,隨后出現(xiàn)的幾起案子鸥滨,更是在濱河造成了極大的恐慌嗦哆,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婿滓,死亡現(xiàn)場(chǎng)離奇詭異老速,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)凸主,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)橘券,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人卿吐,你說(shuō)我怎么就攤上這事旁舰。” “怎么了嗡官?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵箭窜,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我衍腥,道長(zhǎng)磺樱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任婆咸,我火速辦了婚禮竹捉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尚骄。我一直安慰自己块差,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布倔丈。 她就那樣靜靜地躺著憨闰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乃沙。 梳的紋絲不亂的頭發(fā)上起趾,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音警儒,去河邊找鬼。 笑死眶根,一個(gè)胖子當(dāng)著我的面吹牛蜀铲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播属百,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼记劝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了族扰?” 一聲冷哼從身側(cè)響起厌丑,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤定欧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后怒竿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體砍鸠,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年耕驰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了爷辱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朦肘,死狀恐怖饭弓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情媒抠,我是刑警寧澤弟断,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站趴生,受9級(jí)特大地震影響夫嗓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冲秽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一舍咖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锉桑,春花似錦排霉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至后裸,卻和暖如春瑰钮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背微驶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工浪谴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人因苹。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓苟耻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扶檐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凶杖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容