Android TV Leanback 簡介

TV 縱向滑動列表介紹

構(gòu)建滑動列表的幾種方式:

  • ListView / RecyclerView
  • 自定義LinearLayout/ScrollView/ViewGroup
  • 采用leanback庫

google leanback 庫簡介

“Leanback” 就是靠著看的意思榕暇。是指以放松的姿勢倒在沙發(fā)上.谷歌推出 android.support.v17.leanback 軟件包提供的 API 支持在電視設(shè)備上構(gòu)建用戶界面茧球。它為電視應(yīng)用提供了一些重要的小部件。這個庫只支持到api 17以上的版本晤锹,也就是andorid 4.2,而一些效果也只是在api-21以上支持坛吁。

demo介紹:

  • 首先用android Tv的例子來介紹劳殖。運行程序時,整體內(nèi)容被對齊在一個網(wǎng)格布局里拨脉。左側(cè)的每一個標題header,都有右側(cè)對應(yīng)的一個內(nèi)容行row哆姻,他們是一一對應(yīng)的。header+content row由一個類 ListRow來表示玫膀。頁面的整體其實是ListRow的集合
RowsAdapter1-1024x577.png
  • 整體是一個大的ArrayObjectAdapter 由一系列的ListRow來填充矛缨。view的呈現(xiàn)方式由ListRowPresenter來定義。
  • 一個ListRow 由HeaderItem 和一個小的ArrayObjectAdapter組成,這個一行中的ArrayObjectAdapter中放置我們定義的view,呈現(xiàn)方式由CardPresenter來定義箕昭。
    典型的代碼如下:
List<Movie> list = MovieList.setupMovies();

       mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
       CardPresenter cardPresenter = new CardPresenter();

       
       for (int i = 0; i < NUM_ROWS; i++) {
           if (i != 0) {
               Collections.shuffle(list);
           }
           ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
           for (int j = 0; j < NUM_COLS; j++) {
               listRowAdapter.add(list.get(j % 5));
           }
           HeaderItem header = new HeaderItem(i, MovieList.MOVIE_CATEGORY[i]);
           mRowsAdapter.add(new ListRow(header, listRowAdapter));
       }
        setAdapter(mRowsAdapter);
  • 基本關(guān)系:
    ArrayObjectAdapter (RowsAdapter) ← A set of ListRow
    ListRow = HeaderItem + ArrayObjectAdapter (RowAdapter)
    ArrayObjectAdapter (RowAdapter) ← A set of Object (CardInfo/Item)
ListRow1.png

MVP的構(gòu)建模式

Leanback 提供了model-view-presenter mvp的方式來構(gòu)建應(yīng)用誉简。

  • model 是由應(yīng)用開發(fā)者來提供,leanback對于model的實現(xiàn)沒有加額外的限制盟广,任何對象都是可以的闷串。

  • view 還是由原來的android.view包下的類來實現(xiàn)。

  • Presenter 是基于現(xiàn)在的Adapter的該概念筋量,并擴充為更具的靈活性和組合性烹吵。特別的是,綁定數(shù)據(jù)到view上的操作已經(jīng)將adapter中分離出去桨武,這部分邏輯由presenter去承擔肋拔。

Presenter

Presenter class 是用來做數(shù)據(jù)和視圖的橋梁的
每一行的視圖展示,每一個卡片的視圖展示都是由Presenter來定義呀酸。Presenter是一個抽象類凉蜂,需要自己來繼承該類。

需要實現(xiàn)下面的三個方法:

  1. onCreateViewHolder(ViewGroup parent);
  2. OnBindViewHolder(ViewHolder ViewHolder,Ojbect item);
  3. onUnBindViewHolder(Viewholder viewhlder);可以看到這些方法跟RecyclerView 的Apdater的實現(xiàn)方法很像性誉,實際上這些方法就是借鑒了recyclerview的實現(xiàn)窿吩。
    不同的是多了一個onUnBindViewHolder的方法,在這個方法里错览,可以做一下釋放資源的操作纫雁,主要包括圖片資源。

View

  1. 數(shù)據(jù)model的容器 ObjectAdapter,類似于RecyclerView.Adapter,但是將迭代展示每個item對應(yīng)的view的任務(wù)分離了出去倾哺。實現(xiàn)類有ArrayObjectAdapter和CursorOjbectAdapter,前者持有列表數(shù)據(jù)轧邪。我們可以是實現(xiàn)自己的ObjectAdapter的子類。

  2. Preseter 負責將數(shù)據(jù)綁定到view上羞海,并呈現(xiàn)view忌愚;presener和ObjectAdapter合起來相當于現(xiàn)在的Android里的Adapter.這種分離的優(yōu)勢在于,我們可以在Adaper的范圍之外去控制view的創(chuàng)建却邓。例如一個view是從單個對象的數(shù)據(jù)中產(chǎn)生的硕糊,另外的view是有ObjectAdapter來提供數(shù)據(jù)。比如我們現(xiàn)在頁面的構(gòu)成是由一個header 加一個vip行申尤,再加多個相同模式的行癌幕。

  3. PresenterSelector類衙耕,用來選擇用哪一個Presenter去對于ObjectAdapter提供的數(shù)據(jù)適配昧穿。通常是根據(jù)不同的item類型選擇Presenter去適配.現(xiàn)在的頁面中有多行相同視圖展示的,也有其他少數(shù)幾行展示的模式橙喘,這中情況下时鸵,例如聚好看的有頭部的一行,和進入vip的一行,還有其他的列表行饰潜,這種情況下就可以用初坠。

  4. leanback 提供的基本界面是縱向的列表,每個行元素是一個橫向的列表彭雾,縱向列表和橫向列表都用ObjectAdapter來提供數(shù)據(jù)碟刺。

  5. Row 是leanback中定義的一個抽象類,包含一個header和一個ListRow ,ListRow是Row的實現(xiàn)類薯酝,代表一個橫行.用ListRowPresenter來展示view.我們也可以定義自己的RowPresenter來定義行的展示半沽。

整體的介紹:

  1. 整體是一個縱向的recyclerview VerticalCardVeiw 是一個經(jīng)過改寫的recyclerview,增加了不少的適用于大屏幕的方法吴菠。

  2. ItemBridgeAdapter 繼承自RecyclerView.Adapter,作為從RecyclerView.Adpater到Presenter的橋梁者填。
    內(nèi)部持有PresenterSelector 的一個引用。
    在getItemViewType 方法的實現(xiàn)中做葵,會返回相應(yīng)的Presenter,以此實現(xiàn)不同的item布局選擇占哟。

  3. 在onCreateViewHolder的方法實現(xiàn)中,會調(diào)用在上面的方法里選擇出的Presenter 的presenter.onCreateViewHolder方法酿矢,返回一個Presenter.ViewHolder 該類是FacetProvider的實現(xiàn)類榨乎。 ItemBridgeAdapter 本身有一個Viewholder,持有上面生成的 presenter和一個itemVeiw.

  4. 在OnBindViewHolder中瘫筐,用上面拿到的presenter的引用來調(diào)用mPresenter.onBindViewHolder(viewHolder.mHolder, viewHolder.mItem)谬哀,如這次是CardPrenter的 onBindViewHolder在這個方法里執(zhí)行對數(shù)據(jù)與視圖的綁定。

  5. 在itemview不可見時严肪,onViewRecycled方法會被調(diào)用史煎,在這個里面會調(diào)用presenter.onUnbindViewHolder,從名字可以看出來這個是在解除view的綁定時執(zhí)行驳糯,通常在這個方法里執(zhí)行釋放資源的操作篇梭,例如釋放圖片的引用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酝枢,一起剝皮案震驚了整個濱河市恬偷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌帘睦,老刑警劉巖袍患,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異竣付,居然都是意外死亡诡延,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門古胆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肆良,“玉大人筛璧,你說我怎么就攤上這事∪鞘眩” “怎么了夭谤?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長巫糙。 經(jīng)常有香客問我朗儒,道長,這世上最難降的妖魔是什么参淹? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任采蚀,我火速辦了婚禮,結(jié)果婚禮上承二,老公的妹妹穿的比我還像新娘榆鼠。我一直安慰自己,他們只是感情好亥鸠,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布妆够。 她就那樣靜靜地躺著,像睡著了一般负蚊。 火紅的嫁衣襯著肌膚如雪神妹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天家妆,我揣著相機與錄音鸵荠,去河邊找鬼。 笑死伤极,一個胖子當著我的面吹牛蛹找,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哨坪,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼庸疾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了当编?” 一聲冷哼從身側(cè)響起届慈,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎忿偷,沒想到半個月后金顿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鲤桥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年揍拆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芜壁。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡礁凡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慧妄,到底是詐尸還是另有隱情顷牌,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布塞淹,位于F島的核電站窟蓝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏饱普。R本人自食惡果不足惜运挫,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望套耕。 院中可真熱鬧谁帕,春花似錦、人聲如沸冯袍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽康愤。三九已至儡循,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間征冷,已是汗流浹背择膝。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留检激,地道東北人肴捉。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像叔收,于是被迫代替她去往敵國和親每庆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,749評論 25 707
  • Tangram是阿里出品今穿、用于快速實現(xiàn)組合布局的框架模型缤灵,在手機天貓Android&iOS版 內(nèi)廣泛使用 該框架提...
    wintersweett閱讀 3,268評論 0 1
  • 簡介: 提供一個讓有限的窗口變成一個大數(shù)據(jù)集的靈活視圖。 術(shù)語表: Adapter:RecyclerView的子類...
    酷泡泡閱讀 5,148評論 0 16
  • 一蓝晒、概述 對于RecyclerView的學(xué)習(xí)腮出,主要是需要掌握以下幾點: 數(shù)據(jù):Adapter 使用:Recycle...
    澤毛閱讀 7,277評論 1 23
  • 6appium環(huán)境搭建-2android-sdk
    于春海閱讀 173評論 0 0