Android ListView與RecyclerView項目實戰

該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡可能按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深刻理解Android 卷Ⅰ,Ⅱ,Ⅲ》中的相關知識,另外也借鑑了其餘的優質博客,在此向各位大神表示感謝,膜拜!!!git

前言

Hello,你們好,有沒有想我,這一個月沒有更新文章,爲何呢,大聲的告訴你,,我在...(準備面試 ps:南京)。至於怎麼準備的,以及在面試中遇到的問題還有面試結果之類的,咱們下面呢會挑一些與ListView和RecyclerView相關的內容說一下,至於其餘的後文再說,畢竟不能打亂咱們以前的行文安排(嗯,我就是這麼一個十分有節操的人)。github

咱們上一篇說了些什麼呢,RecyclerView,這個東西已經漸漸替代ListView成爲咱們Android開發工程師中常見的控件。按照上一篇的預告呢,咱們本篇是來實戰的。由於畢竟本地數據的展現基本上只能做爲Demo,在實際的工做以及項目中,咱們遇到的問題可能要比Demo複雜的多。面試

面試中遇到的關於ListView以及RecyclerView的問題

第一題 ListView的緩存複用機制

仍是免不得筆試啊,,起碼我面試的幾家公司有80%讓我答一份試卷,並且給你的時間與試卷的複雜度基本上對應不上。(無語。。。)不是說技術上有什麼難點,不過你想完美的答出來,估計要寫很多字,好比其中一題ListView的緩存複用機制。
關於ListView的緩存複用機制在segmentfault

Android開發之漫漫長途 XIV——ListView緩存

一文中有很是詳細的解說,這邊咱們就不重複說了,若是你看過個人那一篇文章,你就明白,這個事情不花個半小時是講不清楚的,更況且是寫。因此咱們在讀書或者讀別人博客的時候要善於總結,抓住核心。性能優化

第二題

上來打開一個界面,相似淘寶上的首頁,問這個頁面怎麼佈局?異步

請讀者先稍微思考個5分鐘再向下看。。。。。佈局

個人思考過程是這樣的性能

  1. 首先是根部局,根部局我在項目中用的最多的是LinearLayout、RelativeLayout、FrameLayout這些佈局,不過明顯這些根部局不符合滑動的條件,必須在其內部定義ScrollView,或者直接頂層就用ScrollView,
  2. 使用ScrollView做爲頂層佈局或者子佈局
  3. 對於內部的列表子View顯示可以使用RecyclerView

直接說了,而後被打臉了,說是ScrollView的話對於含有大量Bitmap的不少View,滑動的話很容易形成OOM。有沒有更好的方案。優化

而後面試官說了一句,可不能夠考慮用RecyclerView做爲根部局,而後嵌套RecyclerView呢,,我茅塞頓開,,而後就沒有而後了。

其實我對於RecyclerView的理解陷入了一個誤區,畢竟在項目中只是拿它作一些列表展現。徹底沒有想過用它做爲佈局的一種,其實也是對於RecyclerView的item type等相關知識理解的不夠深刻。若是用RecyclerView做爲根部局雖然也有許多麻煩之處,可是它帶來的好處也是很明顯的。

注:我不清楚淘寶究竟是怎麼作的哈,,只是舉例說明一下而已

第三題 ListView異步獲取圖片顯示錯位

關於這一題其實是第一題ListView的緩存複用機制的一個實戰題目,關於這個現象是如何產生的以及如何解決,郭神已經在其博客中深刻分析了,我這裏就不獻醜了,讀者可參看 Android ListView異步加載圖片亂序問題,緣由分析及解決方案

小結

如今大多數商業內容性的App基本上都須要使用列表來展現,不論是使用比較老的ListView,仍是正被普遍使用的RecyclerView,這二者都在面試中碰到過。如今來總結一下。

  1. ListView:對於ListView來講,考察最多的是關於ListView的性能優化(其原理也是ListView的複用機制),使用ViewHolder,而後在重寫的getView方法中複用convertView,對於這兩點可能大部分讀者都瞭然於胸。固然還有更加直接的方式,如我碰到的第1題。
  2. RecyclerView:對於RecyclerView來講,

比較簡單的呢,碰到過對ItemDecoration 以及 如何添加HeaderView以及FooterView;
比較複雜的呢,碰到過直接讓你複述RecyclerView的緩存複用機制,也有RecyclerView內幾萬甚至更多條數據爲何沒有OOM這種間接的問法。另外也碰到了對比於ListView來講,RecyclerView的優點等等問題。(關於這些問題,我上一篇文章裏也都提到,讀者可參看 Android開發之漫漫長途 XV——RecyclerView);

個人TDK

這是我在Github上的一個小小的開源項目,項目地址在文末給出,難度也不大,主要是用來面試的時候用來展現的Demo。讀者能夠稍微看一下,涉及一下幾個內容。
主界面以下所示

底部導航

使用Fragment進行導航切換,這部份內容可參看我以前關於Fragment的文章

RecyclerView的下拉刷新和上拉加載

這個使用的是BRAVH的開源庫,關於更多使用指南,請參看官網http://www.recyclerview.org/

RecyclerView自定義LayoutManager

這部份內容可參看自定義LayoutManager 實現弧形以及滑動放大效果RecyclerView

Material Design 協調佈局(CoordinatorLayout)

本篇總結

本篇呢是個實戰項目,先是分享了面試中遇到的關於ListView以及RecyclerView的問題,而後分享了一個小Demo。只是拋磚引玉,讀者呢可在個人博客下評論,分享一些面試中遇到的問題。另外Demo中也有不少部分都虛位以待,讀者也能夠提出一些功能點,提Issue或者Pull request給我。

源碼地址:源碼傳送門

此致,敬禮

相關文章
相關標籤/搜索