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=====为了获取到上下文,获取到之后保存到这里,然后再进行其他操作。 =====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
Android 适配器 自定义相关推荐
- android怎么设置适配器,Android之自定义实现BaseAdapter(通用适配器三)
在上一篇中,我们说过,在setData中如果有很多控件的话,我们还是要在该方法中写入很多代码,为了降低开发的方便性,本次就在此基础上再一次优化.实现原理是这样的,每次在setData中都要查找控件,然 ...
- android 自定义搜索框edittext,Android编程自定义搜索框实现方法【附demo源码下载】...
本文实例讲述了Android编程自定义搜索框实现方法.分享给大家供大家参考,具体如下: 先来看效果图吧~ 分析:这只是模拟了一个静态数据的删除与显示 用EditText+PopupWindow+lis ...
- android自定义手势,Android实现自定义手势和识别手势的功能
这篇文章主要介绍了Android实现自定义手势和识别手势的功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1. 先完成自定义手势的Activity 1.1 因 ...
- Android ListView 自定义背景后 滚动时的背景变黑问题
ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉,原因是,滚动时,列表里面的view重绘时,用的依旧 ...
- android 实现自定义监听接口,Android在自定义类中实现自定义监听器方式
Android在自定义类中实现自定义监听器方式 发布时间:2020-08-31 06:19:39 来源:脚本之家 阅读:203 作者:Simon_Qi 监听器可以说是Android开发中最常用的东西之 ...
- android sqlite自定义函数,Android中自定义一个View的方法详解
本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...
- android+自定义皮肤,android studio自定义更换皮肤详细图文教程
android studio这款app程序开发软件内也内置了多种皮肤主题,程序开发人员如果感觉一种皮肤太过单调乏味,可以选择使用软件内的其他皮肤风格,软件默认的皮肤是IntelliJ,还有黑色的Dra ...
- Android Studio自定义视图无法预览
Android Studio自定义视图没有办法预览 我想大家应该都和我一样,如果看到布局的编码的时候如果右边能够非常直观地显示出对应的视图,心里会非常舒心,像官方提供的tools命名空间就是为了这个目 ...
- android 自定义皮肤,Android Studio 自定义皮肤主题和背景
新的一年,新的开始,在这里先祝福大家在新的一年收获多多,多升职,多加薪,代码没BUG. 第一 Android Studio自定义皮肤主题-ColorThemes 寒假期间有人问我, "你代码 ...
- Android Gradle 自定义Task详解二:进阶
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
最新文章
- DeepMind让AI变身天才数学家!首次提出两大数学猜想,登Nature封面
- 【NetApp】7mode options选项解释
- 做为一名IT新人,必了解程序员与产品经理的恩怨情仇
- 可以装在手机里的3D姿态估计,模型尺寸仅同类1/7,平均关节位置误差却只有5厘米 | CPVR 2021...
- CString::Format
- matlab sort三维_matlab练习题
- 宝塔使用webhook自动部署php项目
- java 设计模式 示例_Java中的访问者设计模式–示例教程
- 1012.log4cplus项目应用
- java file 实例_Java File类的详解及简单实例
- JSP自定义select标签 字典表数据
- 网易音乐社交产品 MUS 上线
- n的约数(数论+DFS)
- 产业分析:中国债券市场投资手册
- 第10周---信息熵与压缩编码基础
- 用手机版python爬虫_Python爬虫也能用手机进行抓包?没错!这个技巧我只告诉你...
- 移远 EC200S 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程
- 6种上市公司数据的采集方法和工具
- 锁消除、锁粗化、偏向锁、适应性锁
- 中国移动支付报告:领跑全球 前景广阔
热门文章
- 联想服务器重装系统快捷键,联想电脑重装系统按什么快捷键
- Unity 多点触控 禁用与启用
- vue生命周期学习(watch跟computed)
- 【Unity3D开发小游戏】《愤怒的小鸟》Unity开发教程
- 我的毕业设计历程——基于Unity3D的MOBA游戏设计(二)
- 上海牌照(沪牌)拍牌,软件,手动
- django配置(setting)之ALLOWED_HOSTS
- 2011微软MVP全球峰会美国行之飞抵西雅图
- 服务器配置443端口报错
- 浙江师范大学计算机复试考什么,浙江师范大学考研难吗?一般要什么水平才可以进入?...