Android 适配器 自定义
?
前言:最近看了幾個開源項目,發現適配器這東西用的很多,一開始覺得這東西高大上,其實呢,感覺就是一個中轉站,或者說是一個接口工具,將數據填充到一個視圖中,幾乎任何項目都會涉及到。所以今天也簡單看了一下,做一做筆記。
?
1.一般情況,第一步,就是建立一個類繼承BaseAdapter=====在自己寫一個構造函數,很簡單,主要是LayoutInflater和Context=====這兩個東西相當重要,感覺貫穿了整個工程,哪里都涉及到,所以這里建立兩個私有成員,將構造函數的參數傳給私有成員即可。
?
2.其次,覆寫一個=====int getCount()=====獲得配器中數據集的數據個數。
?
3.其次,覆寫一個=====Object getItem(int position)=====獲取數據集 與 索引對應的數據項=====很少用,不用管。
?
4.其次,覆寫一個=====getItemId(int positon)=====獲取指定行對應的ID=====個人也很少用,不管。
?
5.最后,覆寫一個=====View getView(int position,View convertView,ViewGroup parent)=====非常重要,基本千變萬化的就是這個東西了。
?
6.一個案例=====再細節分析
package com.juns.wechat.adpter;import java.util.List;import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView;import com.easemob.chat.EMGroup; import com.juns.wechat.Constants; import com.juns.wechat.R; import com.juns.wechat.chat.ChatActivity; import com.juns.wechat.common.ViewHolder;public class MyGroupAdpter extends BaseAdapter {protected Context context;private List<EMGroup> grouplist;public MyGroupAdpter(Context ctx, List<EMGroup> grouplist) {context = ctx;this.grouplist = grouplist;}@Overridepublic int getCount() {return grouplist.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.layout_item_mygroup, parent, false);}final EMGroup group = grouplist.get(position);ImageView img_avar = ViewHolder.get(convertView, R.id.img_photo);TextView txt_name = ViewHolder.get(convertView, R.id.txt_name);img_avar.setImageResource(R.drawable.defult_group);txt_name.setText(group.getGroupName());convertView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(context, ChatActivity.class);intent.putExtra(Constants.NAME, group.getGroupName());intent.putExtra(Constants.TYPE, ChatActivity.CHATTYPE_GROUP);intent.putExtra(Constants.GROUP_ID, group.getGroupId());context.startActivity(intent);}});return convertView;} }?
7.首先是一個類叫做MyGroupAdpter=====繼承了BaseAdapter=====一般情況下都是繼承這個東西的,所以不用管那么多的,這個最簡單,最方便。
?
8.兩個成員變量=====Context=====為了獲取到上下文,獲取到之后保存到這里,然后再進行其他操作?! ?#61;====List<EMGroup>=====一個類的列表=====也是為了從別人那里得到,然后再進一步地操作?! ?#61;====一般有很多這樣的,都是不得不建立一個成員變量只為了從別人那里得到,自己用。
?
9.然后是一個構造函數,里面有兩個參數,一個是Context=====上下文的意思,這個東西也非常關鍵,大多數情況都要,所以直接寫上。第二個是一個List<自定義類>,意義也就是傳值吧,將外面的東西帶到這里面,然后我在把它加工一下,然后輸出,然后又作為原材料,傳給別人用,然后別人再次加工,然后再輸出,可以說一個項目基本都是這樣的,來來回回的,只為了最后那個美麗的結果。
?
10.然后是一個覆寫的一個getCount方法,這里返回的是從外面傳進來的一個List<自定義類>的數目,有時候要算長度什么的,直接調用就有結果了。
?
11.然后是getItem方法,用的比較少,返回一個對象,外面的世界傳進去一個索引,它自己產生一個對象。就是這么簡單而智能。
?
12.然后是getItem方法,外面的世界依舊傳進去一個索引,它自己產生一個唯一標識的ID,這就很有個性了吧。不過實際中也很少用噠。
?
13.最后就是重頭戲了。getView方法=====其實它就是每一個=====是每一行!這里可以自定義很多東西了,外面的世界傳進去了一個索引,一個視圖,一個視圖組。首先判斷外面的世界傳進去的一個view是否為空,如果為空,那就太不仗義了,就行給別人一個空紅包一樣,所以這里首先進行判斷。如果是真的紅包,那么就要真的干活了。
?
14.干什么活呢?當然是加載一個布局了。這個布局只是其中一個的布局哦。個人感覺也是代表了集體,就像一個班長一樣,帶個頭,其他人都這么做了。要加載布局當然要有數據啊,不然一個空殼,真的很尷尬,是不是?!
?
15.那么數據怎么來呢?當然是外面的世界傳進來的啊!怎么傳進來的啊?=====構造函數啊!總是第一次執行,就像一個onCreate=====我稱之為夢開始的地方=====因為只有這個東西正確執行了,布局才有可能加載出來。
?
16.外面的世界將數據傳進來了,用一個成員變量暫時存一下,然后得到布局中的細節東西,通過ViewHolder這個工具類或者直接用findViewById簡單粗暴來獲得某一個視圖,然后就把對應的值寫進去就行了。
?
17.注意這個函數,外面的世界還傳了一個position,那么就很開心了,我們可以為這個視圖設置監聽器,就是用戶按了這一行,我們要怎么操作,上面的例子就是跳到另外一個活動,應該都能看懂的。最后返回一個視圖,就是我們操作完之后的一個視圖,這個視圖就十分美麗了。
?
18.困死了。早點休息吧。=====晚安=====2017/7/17 0:34
轉載于:https://www.cnblogs.com/Jason-Jan/p/7192539.html
總結
以上是生活随笔為你收集整理的Android 适配器 自定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL中的随机函数-笔记
- 下一篇: win7找回快速启动栏