Android繼承BaseAdapter時要重寫的函數的說明


原文來自:http://www.2cto.com/kf/201405/299601.html,我自己做了一些修改

 

Android中繼承BaseAdapter后需要重寫四個函數,但一般還要寫一個構造函數用於初始化項數據,如List<T> dataList:

一、是int getCount(){}函數,這個是返回Adapter 連接/綁定 的數據集合的長度,也是對應容器View(如ListView)的項的個數。

二、是View getView(int position, View convertView, ViewGroup parent){}函數,這個是返回parent中每個項(如ListView中的每一行)的View。

剩下兩個getItem(int position)和getItemId(int position)詳細的說一說:

首先看 getItem:

           @Override
            public Object getItem(int position) {

    ...

            }

官方解釋是Get the data item associated with the specified position in the data set.即獲得相應數據集合中特定位置的數據項。那么該方法是在哪里被調用呢?什么時候被調用呢?

通過查看源代碼發現,getItem方法不是在Baseadapter類中被調用的,而是在Adapterview中被調用的。

AdapterView類中,我們找到了如下方法,

public Object getItemAtPosition(int position) { T adapter = getAdapter(); return (adapter == null || position < 0) ? null : adapter.getItem(position); }

那么getItemAtPosition(position) 又是什么時候被調用?答案:它也不會被自動調用,它是用來在我們設置

setOnItemClickListener、setOnItemLongClickListener、setOnItemSelectedListener的點擊選擇處理事件中方便地調用

來獲取當前行數據的。官方解釋Impelmenters can call getItemAtPosition(position) if they need to access the data

 associated with the selected item.所以一般情況下,我們可以這樣寫:

注意這里的Object可以換成具體的類型,或泛型。

           @Override
            public Object getItem(int position) {

      return this.dataList.get(position);

            }

 

當然如果你喜歡,也可以在里面直接返回null(前提是你確信不會用到它的返回值)

 

至於getItemId(int position),它返回的是該postion對應item的id,AdapterView也有類似方法:

public long getItemIdAtPosition(int position) { T adapter = getAdapter(); return (adapter == null || position < 0) ? INVALID_ROW_ID : adapter.getItemId(position); }

不同getItem的是,某些方法(如ListView的setOnItemClickListener(new AdapterView.OnItemClickListener(){@Override public void onItemClick(...))有id這個參數(最后一個long id),而這個id參數就是取決於getItemId()這個返回值的。

我們一般可以這樣實現:

@Override public long getItemId(int position) { return position; }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM