博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 适配器 自定义
阅读量:5083 次
发布时间:2019-06-13

本文共 3771 字,大约阅读时间需要 12 分钟。

 

  前言:最近看了几个开源项目,发现适配器这东西用的很多,一开始觉得这东西高大上,其实呢,感觉就是一个中转站,或者说是一个接口工具,将数据填充到一个视图中,几乎任何项目都会涉及到。所以今天也简单看了一下,做一做笔记。

 

  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
grouplist; public MyGroupAdpter(Context ctx, List
grouplist) { context = ctx; this.grouplist = grouplist; } @Override public int getCount() { return grouplist.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @Override public 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() { @Override public 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=====为了获取到上下文,获取到之后保存到这里,然后再进行其他操作。  =====List<EMGroup>=====一个类的列表=====也是为了从别人那里得到,然后再进一步地操作。  =====一般有很多这样的,都是不得不建立一个成员变量只为了从别人那里得到,自己用。

 

  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

你可能感兴趣的文章
监督学习模型分类 生成模型vs判别模型 概率模型vs非概率模型 参数模型vs非参数模型...
查看>>
Mobiscroll脚本破解,去除Trial和注册时间限制【转】
查看>>
实验五 Java网络编程及安全
查看>>
32位与64位 兼容编程
查看>>
iframe父子页面通信
查看>>
ambari 大数据安装利器
查看>>
java 上传图片压缩图片
查看>>
magento 自定义订单前缀或订单起始编号
查看>>
ACM_拼接数字
查看>>
计算机基础作业1
查看>>
Ubuntu 深度炼丹环境配置
查看>>
C#中集合ArrayList与Hashtable的使用
查看>>
从一个标准 url 里取出文件的扩展名
查看>>
map基本用法
查看>>
poj-1163 动态规划
查看>>
Golang之interface(多态,类型断言)
查看>>
Redis快速入门
查看>>
BootStrap---2.表格和按钮
查看>>
Linear Algebra lecture 2 note
查看>>
CRC计算模型
查看>>