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;
} @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
Android 适配器 自定义的更多相关文章
- android 适配器 ArrayAdapter,SimpleAdapter的学习
今天认真看了下android适配器,学习了下它的使用方法. 一,ArrayAdapter ArrayAdapter 比较简单,只可以存放一行文本信息.下面是简单的实现 private ListView ...
- Android RatingBar 自定义样式
Android RatingBar 自定义样式 1.先定义Style: <style name="RadingStyle" parent="@android:sty ...
- Android实现自定义带文字和图片的Button
Android实现自定义带文字和图片的Button 在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法. 一.用系统自带的Button实现 最简单的一种办法就 ...
- Android Studio 自定义debug签名文件keystore
Android Studio 自定义debug签名文件keystore
- Android读取自定义View属性
Android读取自定义View属性 attrs.xml : <?xml version="1.0" encoding="utf-8"?> < ...
- Android之自定义画图文字动画
结构: BaseView: package com.caiduping.canvas; import android.content.Context; import android.graphics. ...
- Android 三档自定义滑动开关,禁止点击功能的实现,用默认的seekbar组件实现
android三档自定义滑动开关,禁止点击功能的实现,普通开关网上有很多例子,三档滑动开关的则找了整天都没有相关例子,开始用普通开关的源码修改了自己实现了一个类,但效果不如人意,各种边界情况的算法很难 ...
- Android 自定义View修炼-【2014年最后的分享啦】Android实现自定义刮刮卡效果View
一.简介: 今天是2014年最后一天啦,首先在这里,我祝福大家在新的2015年都一个个的新健康,新收入,新顺利,新如意!!! 上一偏,我介绍了用Xfermode实现自定义圆角和椭圆图片view的博文& ...
- Android Toast 自定义
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
随机推荐
- js中===、==、!=、!===的区别
结论 ===:先比较两个变量的类型,然后再比较值 !==:上面的值取非 ==:如果变量类型相同,比较值是否相同:类型不同,先转成相同类型,再比较值 !=:上面的值取非 代码 var num = 1; ...
- 【转】sql server数据库操作大全——常用语句/技巧集锦/经典语句
本文为累计整理,有点乱,凑合着看吧! ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ ☆ ☆ ☆ sql 宝 典 ☆ ☆ ☆ 2012年-8月 修订版 ☆ ...
- 转 --简单解决Linq多条件组合问题
本文笔者用清晰的实例,解决了Linq多条件问题,思路十分的清晰,笔者也很细心的做了描述,希望能给你带来帮助. 最近有个项目准备功能改版,师兄吩咐:尽可能地做到万般皆Linq,所以很多东西都要从存储过程 ...
- personalWebsite_1:历史记录汇总
最开始,根据 https://blog.csdn.net/zbl1146556298/article/details/79714239 进行网站构思设计,根据源码, 1.把gradle项目转为mav ...
- ConcurrentHashMap源码刨析(基于jdk1.7)
看源码前我们必须先知道一下ConcurrentHashMap的基本结构.ConcurrentHashMap是采用分段锁来进行并发控制的. 其中有一个内部类为Segment类用来表示锁.而Segment ...
- python之__init__使用方法
定义类的时候,若是添加__init__方法,那么在创建类的实例的时候,实例会自动调用这个方法,一般用来对实例的属性进行初使化.比如:class testClass: def __init__(self ...
- 关于VPS主机KVM/OPENVZ/CN2区别与含义
1.OPENVZ OpenVZ是基于Linux内核和作业系统的操作系统级虚拟化技术.OpenVZ允许物理服务器运行多个操作系统,被称虚拟专用服务器(VPS,Virtual Private Server ...
- [Asp.Net] Form验证中 user.identity为false
这个方法可以是user.identity设置为true FormsAuthentication.SetAuthCookie(Username, true); 但是要开启form验证, 在配置文件中 & ...
- IE Proxy Swich - IE 代理切换工具
通过此工具可方便的切换计算机系统代理设置的开关,无需重启IE 来激活设置 下载 环境要求: 可能需要.NET 4.0 以上平台, 其他平台未测试 截图与功能如下 支持快捷方式参数 我个人习惯是在桌面 ...
- IOS 当一个控件被添加到父控件中会调用(didMoveToSuperview)
/** * 当一个控件被添加到父控件中就会调用 */ - (void)didMoveToSuperview { if (self.group.opened) { self.nameView.image ...