天天看點

Android群英傳筆記——第四章:ListView使用技巧Android群英傳筆記——第四章:ListView使用技巧

最近也是比較迷茫,但是有一點點還是要堅持的,就是學習了,最近離職了,今天也是繼續溫習第四章listview,也拖了其實也挺久的了,listview可謂是老牌大将了,很多的應用場景都要使用它,他也是我們用得最多的控件之一了,雖然現在出來了一個recyclerview,但是listview的地位一時半會兒還是撼動不了的,這就促使我們更加應該去把他掌握了
我們一步步來把listview學習好
viewholder模式是提高listview效率的一個很重要的方法,他充分利用了listview的視圖緩存機制,避免每次調用getview()的時候去通過findviewbyid()執行個體化控件,有人測試結果效率要高百分之五十,我們隻需要在自定義的adapter裡面定義一個内部類viewholder即可,代碼如下:
然後我們在getview的時候複用就行了,我們來看一下完整的adapter
如果我們要使用的話,我們就可以直接使用adapter了
我們運作一下
Android群英傳筆記——第四章:ListView使用技巧Android群英傳筆記——第四章:ListView使用技巧
ok我們繼續
listview在各個項目之中,可以通過分割線進行區分的,系統也提供了兩個屬性來設定item間的顔色和高度
我們來運作一下
Android群英傳筆記——第四章:ListView使用技巧Android群英傳筆記——第四章:ListView使用技巧
但是如果你是需要去掉這個分割線的話,其實也好辦
看圖
Android群英傳筆記——第四章:ListView使用技巧Android群英傳筆記——第四章:ListView使用技巧
這個看需求吧,雖然說實話,我是很不喜歡這個滾動條的,但是不可否認他還是需要用來顯示進度的,去掉的方法也很簡單,加一條屬性就可以了
Android群英傳筆記——第四章:ListView使用技巧Android群英傳筆記——第四章:ListView使用技巧
先來看一下點選的效果,是有一點點灰色的點選效果,我們把他給去掉,加一個點選回報顔色透明的屬性就可以了
這裡;你也可以直接填#00000000
listview預設是從上到下的,我們可以認為的去設定他要顯示的item
這個就有點類似于平滑的效果了
這個就很常用了,我們在某一個場景的時候需要對listview增加資料,我們應該怎麼樣做尼?我們在xml裡新增加一個button
然後我們的點選事件就可以這樣寫了
來看看效果吧
Android群英傳筆記——第四章:ListView使用技巧Android群英傳筆記——第四章:ListView使用技巧
listview作為一個viewgroup,他提供了很多操縱子view的方法,最常用的就是getchilaat()來擷取view了
有時候我們擷取一條資料的時候,他需要顯示清單,有的可能是空,這樣的話,我們就得處理一下了,我們在布局中新加一個textview
隻要在代碼中設定如果是空資料的話就加載這個布局就可以
這樣的話,如果listview為空資料的時候就會設定這句話了
listview的滑動監聽可是listview的很重要的一個技巧,很多應用場景需要重寫listview的其實都要在滑動監聽上下很大的功夫,通過判斷滑動事件來處理不同的邏輯這是很有必要的,開發者通常還需要gesturedetector手勢識别,velocitytracker滑動速度檢測來輔助監聽,這裡介紹兩種監聽方法,一種是ontouchlistener,另一中是onscrolllistener
ontouchlistener是view的監聽事件,包括action_down,up,move等,通過坐标的改變老發生不同的邏輯
onscrolllistener是abslistview的監聽事件,他封裝了很多listview的相關資訊,是以用起來很靈活
onscrolllistener中有兩個回調方法onscrollstatechanged()和onscroll,我們先來看看onscrollstatechanged吧,這個方法的參數i來決定其回調的次數,有三種模式

onscrolllistener.scroll_state_idle://滾動停止

onscrolllistener.scroll_state_touch_scroll://正在滾動

onscrolllistener.scroll_state_fling://手指抛動時,即手指用力滑動的時候

當使用者沒有做手指抛動的動作時,這個方法隻會調用2次,否則就調用三次,差别就在于手指抛動的這個狀态,通常情況下,我們會在這個方法中通過不同的狀态來标注一些flag,我們來看下onscrill()這個方法
這裡有一點要注意的是,目前能看到的item數也包括沒有顯示完全的,這樣我們就又能get到一些技巧了
再比如監聽滑動放心
通過一個成員變量來記住上一個可視item就知道滑動的方法了,當然,listview還提供了很多擷取位置資訊的方法
雖然listview應用很廣泛,但是畢竟是一個顯示的東西,擴充性肯定要的,我們接下來說幾種常見的擴充
android預設滑動到頂部或者底部隻會有一個陰影,而在5.x之後改變成了半圓的陰影
Android群英傳筆記——第四章:ListView使用技巧Android群英傳筆記——第四章:ListView使用技巧
而在ios上,清單是具有彈性的,即滾動到頂部或者底部,會再滾動一段距離,這樣的設計感覺還是挺友好的,我們也來模仿一下 我們在檢視listview的源碼的時候會發現一個控制滑動到邊緣的處理方法
我們可以看到這樣一個參數maxoverscrolly,就是他負責控制滑動的個數的,預設是0,我們重寫listview
相信看過google最新的應用,或者使用了md風格的應用都知道,清單滑動的時候actionbar可以根據狀态顯示或者隐藏,

這一段作者寫的很亂

這要是講一下大概,需要使用toolsbar,然後一個listview
不詳細記了,在我講md風格的時候會詳細介紹的
相信大家都看過聊天的listview吧,這個主要是adapter做手腳,其實設計者早就想到了這種方法,是以在繼承baseadapter的時候還需要重寫兩個方法
我們這裡大緻的了解一個思路,我們可以設定一個tag來識别不同的方向,先寫兩個item,分别是左邊的和右邊的布局,然後,我們再來寫個實體類bean
現在就可以編寫我們的adapter了
這裡大緻的思路也就是在getview中區分,現在我們的speaklistviewactivity中就可以這樣寫
把資料裝載好了就行,這裡隻是示範

都是什麼鬼,寫的不是很詳細呀

通常情況下,如果要動态的改變點選item的布局來達到focus的效果,一般有兩種方法,一是将兩個布局寫在一起,通過布局的顯示隐藏來達到切換布局的效果,另外一種則是在getview的時候,通過判斷來選擇不同的加載不同的布局,兩種方法都有利弊,關鍵還是要看看應用場景,是以我們還是得在adapter下手腳
在這兩個方法中就可以根據item的不同位置顯示不同的資訊了,下面我們回到adapter中
這樣就可以自由選擇了 那我們現在就來監聽他的點選邏輯吧
ok,搞定,實在的說吧,這一章不止這點内容,不過本書很多都一筆帶過了,當然,的确進階書不需要寫很詳細,但是…額….我們接着看下一章吧!

繼續閱讀