Android SimpleAdapter适配器使用详解
作者:sky-update 时间:2023-10-07 07:04:26
Android SimpleAdapter使用详解
HolderAdapter背景
Android的AdapterView用的比较多,ListView,GridView,Spinner等,原生的BaseAdapter对ViewHolder没有支持,每次都要,定义内部类,inflater根布局,对item内部view设置clicklistener并转发到adapter的调用者等。写的次数多了感觉很繁琐,于是写了个简单的封装,简化Adapter的编写,
仓库连接http://git.oschina.net/phodev/SimpleAdapter.
主要文件介绍
1,CommonAdapter.java从BaseAdapter继承,添加了常用的函数,通过泛型约定了List数据源,代替子类实现getCount功能,添加bindClick实现Adapter的OnItemClickListener。
2,BaseViewHolder.java和HolderAdapter结合,实现类似Activity的view初始化方方式onCreate->setContentView->findViewById。
3,HolderAdapter.java从CommonAdapter继承,主要用来驱动BaseViewHolder工作。
使用方法
1,Adapter定义
public class SampleHolderAdapter extends HolderAdapter<Object> {
//定义Item内部的点击事件,如果不需要可以不定义
public static final int CLICK_ACTION_ADD = 1;
public static final int CLICK_ACTION_UPDATE = 2;
public static final int CLICK_ACTION_DELETE = 3;
//构造函数配置数据源(可选,或者之后通过setData更新)
public SampleHolderAdapter(List<Object> data) {
super(data);
}
@Override
public BaseViewHolder<?> createViewHolder(int position) {
//创建期望的 ViewHolder
return new ViewHolder();
}
class ViewHolder extends BaseViewHolder<Object> {
Button btn1, btn2, btn3;
@Override
protected void onCreate(Context context, ViewGroup parent) {
//ViewHolder创建后onCreate会被执行1次
setContentView(R.layout.item_test);//setContent支持View或者layout id
btn1 = (Button) findViewById(R.id.btn1);//findViewById
btn2 = (Button) findViewById(R.id.btn2);
btn3 = (Button) findViewById(R.id.btn3);
}
@Override
protected void onDataChanged(int position, Object data) {
//adapter getView的时候onDataChanged会被执行一次
btn1.setText("add " + position);
btn2.setText("update " + position);
btn3.setText("delete " + position);
//
bindClick(btn1, position, CLICK_ACTION_ADD);//绑定ItemClick,每次都需bind
bindClick(btn2, position, CLICK_ACTION_UPDATE);
bindClick(btn3, position, CLICK_ACTION_DELETE);
}
}
}
2,Adapter使用
//数据源
private final ArrayList<Object> mData = new ArrayList<>();
//创建Adapter并绑定数据源
private final SampleHolderAdapter mAdapter = new SampleHolderAdapter(mData);
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listview);
//绑定Adapter
mListView.setAdapter(mAdapter);
//设置click listener(由于CommonAdapter支持,并通过bindClick声明)
mAdapter.setOnItemClickListener(onItemClickListener);
}
//ClickListener实现
private OnItemClickListener onItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(CommonAdapter<?> adapter, View v, int position, int action) {
switch (action) {//action就是我们SampleHolderAdapte中定义并且bindClick的value
case SampleHolderAdapter.CLICK_ACTION_ADD:
toast(getContext(), position + " add click");
break;
case SampleHolderAdapter.CLICK_ACTION_UPDATE:
toast(getContext(),position + " update click");
break;
case SampleHolderAdapter.CLICK_ACTION_DELETE:
toast(getContext(), position + " delete click");
break;
}
}
};
到此定义和使用的代码完毕。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:https://my.oschina.net/u/783094/blog/886353
标签:Android,SimpleAdapter
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
kafka生产者发送消息流程深入分析讲解
2022-10-12 08:39:30
![](https://img.aspxhome.com/file/2023/6/125216_0s.png)
Android仿水波纹流量球进度条控制器
2022-09-02 01:13:03
![](https://img.aspxhome.com/file/2023/7/138937_0s.gif)
Android自定义滑动解锁控件使用详解
2022-08-20 05:36:38
![](https://img.aspxhome.com/file/2023/3/138423_0s.gif)
PowerShell 定时执行.Net(C#)程序的方法
2023-07-09 14:10:39
springboot中通过lua脚本来获取序列号的方法
2023-05-05 04:25:44
![](https://img.aspxhome.com/file/2023/9/97969_0s.png)
聊聊Controller中RequestMapping的作用
2021-12-08 20:48:45
![](https://img.aspxhome.com/file/2023/9/63099_0s.png)
C# 判断字符串第一位是否为数字
2023-05-29 20:06:44
C#图像处理之头发检测的方法
2023-11-08 22:10:28
![](https://img.aspxhome.com/file/2023/7/96357_0s.jpg)
举例解析Java的图像缓冲技术的使用
2022-09-08 17:17:17
C# 给PPT中的图表添加趋势线的方法
2022-02-27 10:18:40
![](https://img.aspxhome.com/file/2023/2/119422_0s.png)
java实现单词小游戏
2023-11-25 05:03:33
![](https://img.aspxhome.com/file/2023/2/59522_0s.png)
Spring Security 控制授权的方法
2023-08-06 19:21:08
![](https://img.aspxhome.com/file/2023/4/58024_0s.png)
Java详细讲解堆排序与时间复杂度的概念
2023-10-20 02:00:11
![](https://img.aspxhome.com/file/2023/7/58597_0s.png)
Android自定义View实现BMI指数条
2021-08-28 18:12:12
![](https://img.aspxhome.com/file/2023/0/103920_0s.jpg)
C# 添加、修改和删除PDF书签的实例代码
2022-09-24 06:45:55
![](https://img.aspxhome.com/file/2023/4/68614_0s.png)
shiro无状态web集成的示例代码
2021-10-13 06:15:46
Springboot项目快速实现拦截器功能
2022-10-05 12:34:50
![](https://img.aspxhome.com/file/2023/8/77068_0s.png)
Android开发实现浏览器全屏显示功能
2022-01-01 18:01:48
简单谈谈java的异常处理(Try Catch Finally)
2021-08-01 12:40:02
C#调用VB进行简繁转换的方法
2023-02-25 23:19:43