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.mzph.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 . 桌面媒体 . 中文官方…