android 手写万能adapter适配器
android开发中,我们离不开adapter,每个项目都有很多地方需要adapter,那么我们如何让自己少写adapter代码呢?那就是封装adapter,让我们的adapter成为万能的adapter。下面我列出我实现的思路,供给大家学习与参考,当然有更好的方式也可以提供建议哦。
一、针对Listview或GridView的万能适配器(源码)
1.第一步实现公用的viewholder
/**
* 优化adapter用的ViewHolder
* Created by admin on 17/8/2.
*/ public class ViewHolder { //当前item的view
private View mContentView;
// 用于存储id用的容器
private SparseArray<View>mViews; public ViewHolder(Context context, ViewGroup parent, int position, @LayoutRes int layoutId){ this.mViews = new SparseArray<>();
this.mContentView = LayoutInflater.from(context).inflate(layoutId,parent,false);
this.mContentView.setTag(this);
} /**
* 创建view
* @param context
* @param contentView
* @param parent
* @param position
* @param layoutId
* @return
*/
public static ViewHolder createView(Context context,View contentView,ViewGroup parent,int position,@LayoutRes int layoutId){ if(contentView==null){ return new ViewHolder(context,parent,position,layoutId); }else { ViewHolder holder = (ViewHolder) contentView.getTag(); return holder;
} } /**
* 提供view给外部访问
* @return
*/ public View getContentView() {
return mContentView;
} /**
* 通过id获取控件
* @param id
* @param <T>
* @return
*/
public <T extends View> T getViewById(@IdRes int id){ View view = mViews.get(id);
if(view==null){ view = mContentView.findViewById(id);
mViews.put(id,view);
} return (T)view; } /**
* 这里是设置文字当然还可以扩展更多如果有需要自己按这种方式实现一下就可以的
* @param id
* @param text
* @return
*/
public ViewHolder setText(@IdRes int id,CharSequence text){ TextView view = getViewById(id);
view.setText(text);
return this;
} } 2.第二步实现公用的adapter
/**
* 公用adapter
* Created by admin on 17/8/2.
*/ public abstract class CommonAdapter<T> extends BaseAdapter { private List<T>list;
private Context context;
private int layoutId;
public CommonAdapter(Context context,List<T>list,int layoutId){ this.context=context;
this.list=list;
this.layoutId=layoutId;
} @Override
public int getCount() {
return list==null? 0:list.size();
} @Override
public Object getItem(int position) {
return list.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = ViewHolder.createView(context,convertView,parent, position, layoutId);
this.onBind(holder,list.get(position));
return holder.getContentView();
} protected abstract void onBind(ViewHolder holder,T model);
} 这样就可以实现万能的adapter了,接下来我们就只需要继承这个万能适配器就可以了轻松绑定数据了。
3.调用
public class MainActivity extends AppCompatActivity {
private List<String>list=new ArrayList<>();
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_butt_test);
this.mListView = this.findViewById(R.id.listView)
for(int i=0;i<30;i++){ list.add("测试数据"+(i+1));
} mListView.setAdapter(new CommonAdapter<String>(this,list,R.layout.list_item) {
@Override
protected void onBind(ViewHolder holder, String model) {
//只需在这里绑定数据就ok了
holder.setText(R.id.title,model);
}
});
}
}
android 手写万能adapter适配器的更多相关文章
- Android 手写Binder 教你理解android中的进程间通信
关于Binder,我就不解释的太多了,网上一搜资料一堆,但是估计还是很多人理解的有困难.今天就教你如何从 app层面来理解好Binder. 其实就从我们普通app开发者的角度来看,仅仅对于androi ...
- 【开源项目】Android 手写记事 App(半成品)
该项目已上传到 CSDN 的 Git 平台中 项目地址:https://code.csdn.net/gd920129/whiteboard GIT SSH:git@code.csdn.net:gd92 ...
- Android—万能ListView适配器
ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...
- Android开发之万能适配器
ListView.GridView等等非常多的东西都需要适配器.而如果开发一个app每一个listview都有写一个Adapter的话,那还怎么愉快的玩游戏.. 什么是ViewHolider以及的用法 ...
- android打造万能的适配器(转)
荒废了两天,今天与大家分享一个ListView的适配器 前段时间在学习慕课网的视频,觉得这种实现方式较好,便记录了下来,最近的项目中也使用了多次,节省了大量的代码,特此拿来与大家分享一下. 还是先看图 ...
- Android中ListView 控件与 Adapter 适配器如何使用?
一个android应用的成功与否,其界面设计至关重要.为了更好的进行android ui设计,我们常常需要借助一些控件和适配器.今天小编在android培训网站上搜罗了一些有关ListView 控件与 ...
- opencv 手写选择题阅卷 (四)Android端 手机应用开发
opencv 手写选择题阅卷 (四)Android 手机应用开发 在PC端把代码调通以后开始开发Android 手机应用,因为主要功能代码为C++代码,所以需要通过NDK编译,JAVA通过JNI方式调 ...
- android 开源 OCR 项目 及手写识别
http://blog.csdn.net/archfree/article/details/6023676 1)一个为Android平台,将识别由手机的相机拍摄的图像文本应用程序. http://co ...
- Android Binder机制详解:手写IPC通信
想要掌握一样东西,最好的方式就是阅读理解它的源码.想要掌握Android Binder,最好的方式就是写一个AIDL文件,然后查看其生成的代码.本文的思路也是来自于此. 简介 Binder是Andro ...
随机推荐
- JSP--常用标签
JSTL简介: JSTL是Java中的一个定制标签库集 实现了JSP页面中的代码复用,提高效率 可读性更强,方便前端查看与开发 环境搭建: JSTL标签和Servlet及JSP页面有比较严格的版本对应 ...
- 短连接时出现connection reset问题的原因
网上摘取的感觉有用的文章,保存下来,让大家学习交流! 在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰 ...
- C++ 0X 新特性实例(比较常用的) (转)
转自:http://www.cnblogs.com/mrblue/p/3141456.html //array #include <array> void Foo1() { array&l ...
- 20179203 《Linux内核原理与分析》第十周作业
第17章 设备与模块 一.设备类型 1. Linux及Unix系统: 块设备 字符设备 网络设备 2.块设备: 通常缩写为blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同而不同:块设备通常 ...
- .net Core 2.1 MVC+EF+Redis搭建
官方学习资料 搭建空MVC框架 1.创建一个空模板 2.创建文件夹 Controllers.Models.Views 3.在Controllers文件夹下创建HomeController.cs 选择C ...
- linux绑定多个ip(转载)
在Linux下有时候需要给一个网卡绑定多个IP,本文介绍在Redhat系列(redhat,Fedora Core,Centos)中的实现方法和一种在Gentoo等其他Linux中普遍适用的方法. 1. ...
- RTSP 协议分析 (一)
RTSP 协议分析1.概述: RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwor ...
- 微服务理论之五:微服务架构 vs. SOA架构
一.面向服务的架构SOA 面向服务的架构是一种软件体系结构,应用程序的不同组件通过网络上的通信协议向其他组件提供服务.通信可以是简单的数据传递,也可以是两个或多个服务彼此协调连接.这些独特的服务执行一 ...
- [poj1459]Power Network(多源多汇最大流)
题目大意:一个网络,一共$n$个节点,$m$条边,$np$个发电站,$nc$个用户,$n-np-nc$个调度器,每条边有一个容量,每个发电站有一个最大负载,每一个用户也有一个最大接受量.问最多能供给多 ...
- PHP和MySql数据库,如何获取每个分类的记录的总数
示例的数据库,如下: 本文说的问题,就是统计每个学院(Sdept)的人数. 还有很多情况,比如说:在制作CMS的时候,文章有个分类问题,所有的文章的记录都是存放到同一个表中. 当我们需要统计每个分类的 ...