Android Adapter基本理解:html
個人理解是:java
一、一個有許多getter的類(就是getView(),getCount()....這些方法)android
二、有多少個get方法?都是什麼?緩存
這些getter是特定的,你能夠複寫他們,所有的方法以下spa
其中通常咱們只用複寫getCount(),getView(),getItemId(),getItem()這四個方法.net
三、這些被誰調用?設計
這些getter是被android系統自行調用的(具體如何調用,做爲像我這樣的新手作稍微瞭解就好)htm
四、爲何要複寫這些get方法?對象
複寫這些getter是爲了返回給android系統,本身想給的結果blog
五、android系統經過這些getter能獲得什麼?
獲得這個view自身的一些信息
eg:以ListView中的Adapter爲例,其中
public int getCount()
返回ListView中要顯示的子View數量,就是item的總數量
public Object getItem(int position)
返回一個子View,即ListView中的一個子條目
public long getItemId(int position)
返回一個item的id,由參數position決定是哪一個id
public View getView(int position, View convertView, ViewGroupparent)
後作詳解
….
六、android系統獲得這些爲了幹什麼?
獲得這些信息以便繪製出這個View,以及以怎麼樣的方式繪製…
View getview(int position, View convertview, ViewGroup parent )的理解:
引用自:http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html其中也有一案例幫助理解
1、原理的理解
工做原理:
若是咱們有上億個項目要顯示怎麼辦?爲每一個項目建立一個新視圖?NO!這不可能!
實際上Android爲你緩存了視圖。
Android中有個叫作Recycler的構件,下圖是他的工做原理:
2、代碼的理解
Google官方的demo代碼:
下兩段引用自:http://blog.csdn.net/pkxiuluo01/article/details/7380974
convertView參數的理解:
每次顯示一個item都調用一次getview方法可是每次調用的時候covertview爲空(由於尚未舊的view),當顯示完了以後。若是屏幕移動了以後,而且致使有些Item(也能夠說是view)跑到屏幕外面,此時若是還有新的item須要產生,則這些item顯示時調用的getview方法中的convertview參數就不是null,而是那些移出屏幕的view(舊view),咱們所要作的就是將須要顯示的item填充到這些回收的view(舊view)中去,最後注意convertview爲null的不只僅是初始顯示的那些item,還有一些是已經開始移入屏幕可是尚未view被回收的那些item。
setTag()和getTag()的理解:
view的setTag和getTag方法其實很簡單,在實際編寫代碼的時候一個view不只僅是爲了顯示一些字符串、圖片,有時咱們還須要他們攜帶一些其餘的數據以便咱們對該view的識別或者其餘操做。因而android 的設計者們就創造了setTag(Object)方法來存放一些數據和view綁定,咱們能夠理解爲這個是view 的標籤也能夠理解爲view 做爲一個容器存放了一些數據。而這些數據咱們也能夠經過getTag() 方法來取出來。
到這裏setTag和getTag你們應該已經明白了。再回到上面的話題,咱們經過convertview的setTag方法和getTag方法來將咱們要顯示的數據來綁定在convertview上。若是convertview 是第一次展現咱們就建立新的Holder對象與之綁定,並在最後經過return convertview 返回,去顯示;若是convertview 是回收來的那麼咱們就沒必要建立新的holder對象,只須要把原來的綁定的holder取出加上新的數據就好了。
我理解過程當中所看的文章:
源頭上理解Adapter,以及一個案例
http://blog.csdn.net/chunqiuwei/article/details/39934169
幫助理解
http://blog.csdn.net/primer_programer/article/details/23064767