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
0
投稿

猜你喜欢

  • kafka生产者发送消息流程深入分析讲解

    2022-10-12 08:39:30
  • Android仿水波纹流量球进度条控制器

    2022-09-02 01:13:03
  • Android自定义滑动解锁控件使用详解

    2022-08-20 05:36:38
  • PowerShell 定时执行.Net(C#)程序的方法

    2023-07-09 14:10:39
  • springboot中通过lua脚本来获取序列号的方法

    2023-05-05 04:25:44
  • 聊聊Controller中RequestMapping的作用

    2021-12-08 20:48:45
  • C# 判断字符串第一位是否为数字

    2023-05-29 20:06:44
  • C#图像处理之头发检测的方法

    2023-11-08 22:10:28
  • 举例解析Java的图像缓冲技术的使用

    2022-09-08 17:17:17
  • C# 给PPT中的图表添加趋势线的方法

    2022-02-27 10:18:40
  • java实现单词小游戏

    2023-11-25 05:03:33
  • Spring Security 控制授权的方法

    2023-08-06 19:21:08
  • Java详细讲解堆排序与时间复杂度的概念

    2023-10-20 02:00:11
  • Android自定义View实现BMI指数条

    2021-08-28 18:12:12
  • C# 添加、修改和删除PDF书签的实例代码

    2022-09-24 06:45:55
  • shiro无状态web集成的示例代码

    2021-10-13 06:15:46
  • Springboot项目快速实现拦截器功能

    2022-10-05 12:34:50
  • 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
  • asp之家 软件编程 m.aspxhome.com