亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android Recyclerview與帶有Viewholder的ListView

Android Recyclerview與帶有Viewholder的ListView

繁花不似錦 2019-11-05 11:24:08
最近,我遇到了RecycleView與Android 5.0一起發布的android 系統,它似乎RecycleView只是一種封裝了傳統ListView視圖,并結合了ViewHolder模式,該模式促進了視圖的重用,而不是每次都創建視圖。使用的其他好處是RecycleView什么?如果兩者在性能方面都具有相同的效果,為什么還要選擇使用RecycleView`?
查看完整描述

3 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

隨著Android Lollipop的出現,RecyclerView正式問世。與ListView相比, RecyclerView更加強大,靈活并且具有重大改進。我將嘗試為您提供詳細的了解。


1)ViewHolder模式


在ListView中,建議使用ViewHolder模式,但這絕不是強制性的。如果是RecyclerView,則使用RecyclerView.ViewHolder類是強制性的。這是ListView和RecyclerView之間的主要區別之一。


它使RecyclerView中的事情變得更加復雜,但是我們在ListView中面臨的許多問題都得到了有效解決。


2)布局管理器


這是RecyclerView的另一項重大改進。在ListView中,唯一可用的視圖類型是垂直ListView。沒有正式的方法甚至可以實現水平ListView。


現在使用RecyclerView,我們可以


i)LinearLayoutManager-支持垂直和水平列表,


ii)StaggeredLayoutManager-支持像交錯列表這樣的Pinterest,


iii)GridLayoutManager-支持顯示在Gallery應用程序中看到的網格。


最好的是,我們可以根據需要動態地執行所有這些操作。


3)項目動畫師


ListViews缺少對好的動畫的支持,但是RecyclerView給它帶來了一個全新的維度。使用RecyclerView.ItemAnimator類,對視圖進行動畫處理變得非常容易和直觀。


4)物品裝飾


對于ListViews,動態裝飾項目(例如添加邊框或分隔線)從未如此簡單。但是在使用RecyclerView的情況下,RecyclerView.ItemDecorator類為開發人員提供了巨大的控制權,但使事情變得更加耗時和復雜。


5)OnItemTouchListener


借助 ListView的AdapterView.OnItemClickListener接口,攔截ListView上的項目單擊非常簡單。但是RecyclerView通過RecyclerView.OnItemTouchListener為其開發人員提供了更多的功能和控制權,但它使開發人員的工作變得有些復雜。


簡而言之,RecyclerView比ListView更具可定制性,并為其開發人員提供了很多控制和功能。


查看完整回答
反對 回復 2019-11-05
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

使用的另一個好處RecycleView是動畫,可以用兩行代碼完成


RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();

        recyclerView.setItemAnimator(itemAnimator);

但是小部件仍然是原始的,例如,您不能創建header和footer。


查看完整回答
反對 回復 2019-11-05
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

好吧,我挖這么點點發現比爾飛利浦這些寶石的文章上RecycleView


RecyclerView可以做的比ListView還要多,但是RecyclerView類本身的責任比ListView少。開箱即用,RecyclerView不會:


在屏幕上放置項目

動畫視圖

處理滾動以外的任何觸摸事件

所有這些東西都放入了ListView,但是RecyclerView使用協作器類來完成這些工作。


您創建的ViewHolders也更加強大。它們是子類 RecyclerView.ViewHolder,它具有許多方法RecyclerView 用途。ViewHolders知道他們當前綁定到的位置,以及哪個項目ID(如果有)。在此過程中,ViewHolder 已被封為爵士。過去,ListView的工作是保留整個項目視圖,而ViewHolder僅保留其中的一小部分。


現在,ViewHolder保留了該ViewHolder.itemView 字段中的所有內容,這是在ViewHolder的構造函數中為您分配的。


查看完整回答
反對 回復 2019-11-05
  • 3 回答
  • 0 關注
  • 1014 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號