android怎么設置適配器,Android之自定義實現BaseAdapter(通用適配器三)

在上一篇中,我們說過,在setData中如果有很多控件的話,我們還是要在該方法中寫入很多代碼,為了降低開發的方便性,本次就在此基礎上再一次優化。實現原理是這樣的,每次在setData中都要查找控件,然后setXXX()什么的,我們可以把這寫實現放如到ViewHolder中去,在ViewHolder中寫入一個鏈式的方法,來幫助我們來實現功能(關于ViewHodler類的代碼我就不再重復寫了,代碼在此:Android之自定義實現BaseAdapter(通用適配器一) ),鏈式方法如下:

public ViewHolder setText(int viewId, String data){

TextView tv = getView(viewId);

tv.setText(data);

return this;

}

通過這個方法,我們可以很好的去設置對應的內容,只需要傳一個需要設置控件的id,然后傳對應的數據,就可以達到設置文字的效果了,下面再看看我們的MyAdapter.java中的代碼

MyAdapter.java

/**

* 上一篇中的MyAdapter

*/

public class MyAdapter extends MyBaseAdapter {

public MyAdapter(List data) {

super(data);

}

@Override

public void setData(ViewHolder holder, Student t) {

TextView tvName = holder.getView(R.id.mTv1);

tvName.setText(t.getName());

TextView tvSex = holder.getView(R.id.mTv2);

tvSex.setText(t.getSex());

}

}

/**

* 優化后的MyAdapter

*/

public class MyAdapter extends MyBaseAdapter {

public MyAdapter(List data) {

super(data);

}

@Override

public void setData(ViewHolder holder, Student t) {

holder.setText(R.id.mTv1, t.getName()).setText(R.id.mTv2, t.getSex());

}

}

ok,對比一下setData中的實現,我們這里只用一條代碼就可以代替上面的實現了,這樣是不是更方便呢,這樣的話,我們的擴展就更加方便了,如果說,我們不僅僅只是設置文本內容,而是通過圖片控件設置圖片呢?很簡單,我們只需要在ViewHolder中再添加我們要實現的方法即可,比如設置圖片,我們可以添加如下代碼:

public ViewHolder setImageResource(int viewId,int resId){

ImageView img = getView(viewId);

img.setImageResource(resId);

return this;

}

public ViewHolder setImageBitmap(int viewId, Bitmap bm){

ImageView img = getView(viewId);

img.setImageBitmap(bm);

return this;

}

添加這兩個方法后,需要設置圖片就很輕松了,只需在setData中傳遞對應的參數即可

@Override

public void setData(ViewHolder holder, Student t) {

holder.setText(R.id.mTv1, t.getName()).setText(R.id.mTv2, t.getSex());

holder.setImageResource(R.id.img1,資源id).setImageBitmap(R.id.img2,bm);

}

好了,一個通用的適配器就已經完成了,整體框架和代碼都已經實現了,我將所有的代碼都綜合一下,寫在下面,方便大家使用,分別是MainActivity.java(主界面類,負責傳參設置ListView的數據)、MyAdapter.java(自定義的適配器)、MyBaseAdapter.java(通用的適配器類)、ViewHolder.java(通用的持有類對象)、以及實體類Student.java

MainActivity.java

public class MainActivity extends AppCompatActivity{

private List data;

private ListView mList;

MyAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

getData();

mList = (ListView) findViewById(R.id.mList);

adapter = new MyAdapter(data);

mList.setAdapter(adapter);

}

private void getData() {

data = new ArrayList<>();

Student stu = null;

for (int i = 0; i < 20; i++) {

stu = new Student();

stu.setName("姓名" + i);

stu.setSex(i % 2 == 0 ? "男" : "女");

data.add(stu);

}

}

}

MyAdapter.java

public class MyAdapter extends MyBaseAdapter {

public MyAdapter(List data) {

super(data);

}

@Override

public void setData(ViewHolder holder, Student t) {

holder.setText(R.id.mTv1, t.getName()).setText(R.id.mTv2, t.getSex());

}

}

MyBaseAdapter.java

public abstract class MyBaseAdapter extends BaseAdapter {

protected List data;

public MyBaseAdapter(List data){

this.data = data;

}

@Override

public int getCount() {

return data == null ? 0 : data.size();

}

@Override

public Object getItem(int position) {

return data.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = ViewHolder.getHolder(convertView,parent,position, R.layout.list_item);

setData(holder,data.get(position));

return holder.getConvertView();

}

public abstract void setData(ViewHolder holder,T t);

}

ViewHolder.java

public class ViewHolder {

private int position;

private SparseArray array;

private View convertView;

private Context context;

private ViewHolder(ViewGroup parent, int position, int layout) {

this.position = position;

this.context = parent.getContext();

convertView = LayoutInflater.from(parent.getContext()).inflate(layout, null);

convertView.setTag(this);

array = new SparseArray<>();

}

public static ViewHolder getHolder(View convertView, ViewGroup parent, int position, int layout) {

if (convertView == null) {

return new ViewHolder(parent, position, layout);

} else {

ViewHolder holder = (ViewHolder) convertView.getTag();

holder.position = position;

return holder;

}

}

public T getView(int viewId) {

View view = array.get(viewId);

if (view == null) {

view = convertView.findViewById(viewId);

array.put(viewId, view);

}

return (T) view;

}

public View getConvertView() {

return convertView;

}

public ViewHolder setText(int viewId, String data) {

TextView tv = getView(viewId);

tv.setText(data);

return this;

}

public ViewHolder setImageResource(int viewId, int resId) {

ImageView img = getView(viewId);

img.setImageResource(resId);

return this;

}

public ViewHolder setImageBitmap(int viewId, Bitmap bm) {

ImageView img = getView(viewId);

img.setImageBitmap(bm);

return this;

}

}

Student.java

public class Student {

private String name;

private String sex;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534414.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534414.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534414.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html游戲怎么編輯器,HTML的編輯器使用

使用 Notepad 或 TextEdit 來編寫 HTML可以使用專業的 HTML 編輯器來編輯 HTML&#xff1a;Adobe DreamweaverMicrosoft Expression WebCoffeeCup HTML Editor(推薦學習&#xff1a;HTML入門教程)不過&#xff0c;我們同時推薦使用文本編輯器來學習 HTML&#xff0c;比如 Notep…

html5中如何自動跳轉頁面,實現HTML5上滑跳轉頁面的兩種方法

方法一&#xff1a;jquery方法movePage($(body));function movePage(dom) {var startY, moveY, moveSpave;dom.on("touchstart", function(e) {startY e.originalEvent.touches[0].pageY; return startY;});dom.on("touchmove", function(e) {moveY e.or…

鴻蒙系統hifi,Apple Music將迎來重大更新 HiFi無損音質即將上線?

原標題&#xff1a;Apple Music將迎來重大更新 HiFi無損音質即將上線&#xff1f;前不久有媒體報道稱&#xff0c;蘋果將在當地時間5月18日推出HiFi版AppleMusic服務&#xff0c;新服務將為Apple Music用戶提供無損的流媒體音樂&#xff0c;滿足HiFi用戶對高音質的追求。而在近…

html5語義化標簽 加粗,html5標簽 H5標簽

html>h5文本元素1.文本元素2.加粗文字 b 3.傾斜文字 i 4.刪除文字 del 5.加粗文字2 strong 6.安全換行 wbr~~~ 7.強調 傾斜元素 em 8.刪除線2 s元素9998 9.下劃線 u 10.下劃線2 ins元素 11.小號字體small元素 12.下標 sub&#xff1a;CH4COOH ; 上標sup&#xff1a;20平方米…

華為筆記本會不會用鴻蒙,華為MateBook Pro筆記本為什么不用鴻蒙操作系統HarmonyO?...

頭條上整天就是各種華為啊鴻蒙啊的&#xff0c;搞得好像人人都見過鴻蒙一樣。還是大家以為操作系統就是做個APP或者王者榮耀&#xff1f;據我所知&#xff0c;鴻蒙OS現在我們能看到的&#xff0c;也就是幾張PPT截圖吧&#xff1f;整天動不動&#xff0c;這個為啥不用鴻蒙&#…

html 復選框name值,HTML(5)表單元素以及對各個表單元素的name、value屬性的理解

我在學習表單元素的時候感覺很混亂&#xff0c;特別是 name value這兩個屬性&#xff0c;沒有真正理解它們是干什么的&#xff0c;所以需要梳理一下。HTML表單元素主要有 HTML5新增的表單元素有三個下面梳理一下這些表單元素的用法并指出各元素的name、value屬性含義1. 元素元…

html中一張a4是多少pt,CSS設置A4紙張尺寸

我需要在網絡上模擬A4紙&#xff0c;并允許打印此頁面&#xff0c;因為它在瀏覽器上顯示(特別是Chrome)。我設置元素的大小為21厘米x 29.7厘米&#xff0c;但當我發送打印(或打印預覽)它剪輯我的頁面。HTMLPage 1/2Page 2/2CSSbody {margin: 0;padding: 0;background-color: #F…

html中的異步請求數據格式,解決layui中table異步數據請求不支持自定義返回數據格式的問題...

使用版本 layui-v2.3.0修改&#xff1a;打開layui中table.js源碼在 Class.prototype.pullData 這個方法定義內部//獲得數據Class.prototype.pullData function(curr, loadIndex){var that this,options that.config,request options.request,response options.response,so…

首頁圖標九宮格 html5,html5九宮格布局的網格菜單代碼

特效描述&#xff1a;html5 九宮格布局 網格菜單代碼。今天我們想和大家分享一個九宮格菜單動畫。這個想法的靈感來自于視頻中的效果&#xff0c;html5全屏展開網格布局菜單&#xff0c;點擊全屏背景切換顯示代碼。代碼結構1. 引入CSS2. 引入JS3. HTML代碼Grid MenuarrowdropTo…

html數據摘要算法,js 摘要算法 base64加密解密 以及字符串編碼

js 摘要算法 base64加密解密 unescape()和escape()對字符串進行編碼 encodeURI()和decodeURI()編碼 encodeURIComponent()和decodeURIComponent()編碼base64&#xff1a;雙向加密方式。1.GitHub中下載base64https://github.com/dankogai/js-base642.對應的HTML中調用//加密var …

html中日期格式化函數,JavaScript日期時間格式化函數分享

這個函數經常用到&#xff0c;分享給大家。函數代碼&#xff1a;Date.prototype.format function(format){var o {"M" : this.getMonth()1, //month"d" : this.getDate(), //day"h" : this.getHours(), //hour"m" : this.getMi…

蘋果6怎樣打開html,蘋果iPhone的Safari瀏覽器使用技巧圖解

&#xfeff;  大多數的 iPhone 用戶們都是用的 iOS 系統自帶的 Safari 瀏覽器&#xff0c;不過很多用戶們對 Safari 瀏覽器卻不是很熟悉&#xff0c;因為 Safari 畢竟沒有國產瀏覽器這么動我們&#xff01;這廂腳本之家小編給大家介紹一些 iOS Safari 瀏覽器的一些你所不知道…

華為p9 html尺寸,華為P9的屏幕尺寸是多少?

華為P9的屏幕尺寸是多少華為P9的屏幕尺寸是5.2英寸。針對華為P9的屏幕尺寸是多少的問題&#xff0c;配置方面&#xff0c;華為P9搭載了麒麟955處理器&#xff0c;麒麟955基于臺積電16nm FinFET Plus制程工藝打造&#xff0c;比FinFET擁有更強的性能。架構方面&#xff0c;麒麟9…

美國款游戲計算機,美國一程序員設計計算機游戲 悼念早逝愛子(圖)

據美國《今日》網站4月25日報道&#xff0c;美國科羅拉多州的程序員賴安?格林(Ryan Green)設計了一款叫做“癌癥&#xff1a;那條猛龍”的游戲&#xff0c;以此紀念愛子約耳(Joel)短暫的一生。2010年&#xff0c;1歲的約耳被診斷出患有致命的腦癌&#xff0c;賴安希望游戲玩家…

計算機專業知識是什么范圍,計算機基礎知識考題

計算機技術在我國得到了快速發展&#xff0c;計算機應用范圍越來越廣泛&#xff0c;普及計算機知識已迫在眉睫。那么你對計算機基礎知識了解多少呢?以下是由小編整理關于的內容&#xff0c;希望大家喜歡!1、電子計算機主要是以***B***劃分發展階段的。A、集成電路 B、電子元件…

html json to table,javascript - HTML - Convert json to table - Stack Overflow

Im trying to convert JSON to a table, but it doesnt. Everything seems fine, but I cannot see the values ??in my table.My code that converts JSON to table:$(function() {var my_data ;$.each(JSON.parse(sonuc.response) , function(key, item){my_data ;my_dat…

html中.inner樣式,JavaScript-DOM動態控制Html標簽對象樣式和innerHTML、className屬性

文本1//首先獲取標簽對象var p document.getElementById("text1");//通過對象自帶的style方法設置不同的樣式p.style.backgroundColor "black";p.style.fontSize "20px";//上面是給p標簽設置兩個樣式&#xff0c;背景顏色和字體大小說明&…

北京科技大學計算機碩士,北京科技大學計算機專業碩士只有面授上課嗎

北京科技大學計算機專業碩士比較熱門&#xff0c;目前有意接受北京科技大學計算機專業碩士教育的學員&#xff0c;對其是否只有面授上課還比較疑惑。下文可供大家參考&#xff1a;一、只有面授上課北京科技大學計算機專業碩士只有面授上課&#xff0c;有周末班和集中班兩種上課…

中國石油計算機文化基礎答案,中國石油大學17年秋《計算機文化基礎》第二次在線作業答案...

中國石油大學17年秋《計算機文化基礎》第二次在線作業答案 (8頁)本資源提供全文預覽&#xff0c;點擊全文預覽即可全文預覽,如果喜歡文檔就下載吧&#xff0c;查找使用更方便哦&#xff01;4.90 積分第二次在線作業窗體頂端單選題 (共40道題)1.(2.5分) Word不具有的功能是()。 …

計算機硬盤中病毒以后怎么辦,計算機中病毒,格式化整個硬盤后還有?怎么辦?...

計算機中病毒&#xff0c;格式化整個硬盤后還有&#xff1f;怎么辦&#xff1f;來源:互聯網 2009-07-23 13:40:47 評論分類: 電腦/網絡 >> 反病毒問題描述:好象是一種播放器帶來的病毒&#xff0c;會在開機時自動運行程序(kuzhan . kubao . IEbar . 桌面媒體 . 中文官方…