优化数据展示:CommonAdapter 在 ListView 与 GridView 中的应用

需积分: 12 0 下载量 131 浏览量 更新于2024-12-03 收藏 120KB ZIP 举报
资源摘要信息:"CommonAdapter:ListView 和 GridView 的 CommonAdapter" 知识点说明: 1. 适配器模式 适配器模式是一种软件设计模式,它允许将一个类的接口转换成客户端期望的另一种接口。在Android开发中,适配器模式常用于数据视图组件与数据源之间的接口转换。例如,在ListView和GridView中,就需要适配器将数据源转换为视图组件可以理解的视图。 ***monAdapter 概念 CommonAdapter是指一个通用适配器,它能够在不同类型的视图组件中重用,例如ListView和GridView。它提供了一种灵活的方式来填充这些组件的数据项,用户只需定义数据与视图的绑定逻辑即可。 3. ListView组件 ListView是Android中用于展示一个垂直滚动列表的视图组件。它能够展示大量的数据项,每个数据项都可以通过自定义布局来展示。ListView通常需要一个适配器来提供数据,CommonAdapter可以作为这样的适配器。 4. GridView组件 GridView是一个用于在水平或垂直方向上以网格形式显示数据的视图组件。与ListView类似,它也需要一个适配器来提供数据项,CommonAdapter也适用于与GridView结合使用。 5. Java编程语言 Java是一种广泛使用的面向对象的编程语言,在Android应用开发中扮演核心角色。CommonAdapter以及ListView和GridView适配器的实现往往使用Java语言。 6. 数据绑定 数据绑定是指将数据源中的数据项映射到视图组件上的具体控件中。在CommonAdapter中,开发者需要实现相应的绑定逻辑,以便在ListView或GridView中正确显示数据。 7. XML布局文件 XML布局文件在Android应用开发中用于定义用户界面的结构。开发者可以在XML中指定ListView或GridView的样式和布局属性,而CommonAdapter的实现中会引用这些布局文件来创建视图。 8. Android开发环境 开发环境是指开发人员用来编写、编译、运行和测试代码的工具集合。对于Android应用,通常使用Android Studio作为主要开发环境。CommonAdapter等适配器的开发和调试都可以在这样的环境中进行。 通过上述知识点的详细说明,可以看出CommonAdapter在Android开发中用于ListView和GridView组件中提供了一种简洁、高效的视图填充方式。开发者通过自定义CommonAdapter,可以极大地提高代码的重用性和维护性,同时也能让数据展示更加灵活多样。而这些知识点的掌握对于进行Android开发的程序员来说,是必要的基础知识和技能。
2019-09-24 上传
通过封装BaseAdapter和RecyclerView.Adapter得到的通用的,简易的Adapter。项目地址:https://github.com/tianzhijiexian/CommonAdapter 效果图:已解决的问题 提升item的独立性,完美支持item被多处复用 item会根据type来做自动复用 支持多种类型的item 一个item仅会调用一次setViews(),避免重复建立监听器 一个item仅会触发一次绑定视图的操作,提示效率 支持dataBinding和其他第三方注入框架 提供了getView()方法来简化findViewById 支持通过item的构造方法来传入Activity对象 支持通过item的构造方法来传入item中事件的回调 提供了getConvertedData(data, type)方法来对item传入的数据做转换,方便拆包和提升item的复用性 支持viewpager的正常加载模式和懒加载 支持快速将listview的适配器切换为recyclerView的适配器 viewpager的notifyDataSetChanged可以正常更新界面 支持recyclerView的添加头部和底部 支持适配器的数据自动绑定,只用操作数据便可,adapter会自动notify界面零、重要接口adapter的item必须实现此接口,接口源码如下:public interface AdapterItem<T> {     /**      * @return item布局文件的layoutId      */     @LayoutRes     int getLayoutResId();     /**      * 初始化views      */     void bindViews(final View root);     /**      * 设置view的参数      */     void setViews();     /**      * 根据数据来设置item的内部views      *      * @param model    数据list内部的model      * @param position 当前adapter调用item的位置      */     void handleData(T model, int position); }例子:public class TextItem implements AdapterItem<DemoModel> {     @Override     public int getLayoutResId() {         return R.layout.demo_item_text;     }     TextView textView;     @Override     public void bindViews(View root) {         textView = (TextView) root.findViewById(R.id.textView);     }     @Override     public void setViews() { }     @Override     public void handleData(DemoModel model, int position) {         textView.setText(model.content);     } }一、ListView GridView的通用适配器——CommonAdapter只需继承CommonAdapter便可实现适配器:listView.setAdapter(new CommonAdapter<DemoModel>(data, 1) {     public AdapterItem<DemoModel> createItem(Object type) {         return new TextItem();     } });二、RecyclerView的通用适配器——CommonRcvAdapter通过继承CommonRcvAdapter来实现适配器:mAdapter = new CommonRcvAdapter<DemoModel>(data) {  public AdapterItem createItem(Object type) {         return new TextItem();   } };三、ViewPager的通用适配器——CommonPagerAdapter通过继承CommonPagerAdapter来实现适配器:viewPager.setAdapter(new CommonPagerAdapter<DemoModel>() {     public AdapterItem createItem(Object type) {         return new TextItem();     } });设计思路1. Adapter如果用adapter常规写法,你会发现代码量很大,可读性低。如果adapter中有多个类型的Item,我们还得在getView()中写很多if-else语句,很乱。 而现在我让adapter的代码量减少到一个8行的内部类,如果你需要更换item只需要动一行代码,真正实现了可插拔化。最关键的是item现在作为了一个独立的对象,可以方便的进行复用。2. AdapterItem和原来方式最为不同的一点就是我把adapter的item作为了一个实体,这种方式借鉴了RecyclerView中ViewHolder的设计。把item作为实体的好处有很多,比如复用啊,封装啊,其余的就不细说了。3. 分层在使用过程中,我发现如果adapter放在view层,那就会影响到view层的独立性。此外adapter中经常有很多数据处理的操作,比如通过type选择item,数据的拆包、转换等操作。于是我还是推荐把adapter放在mvp的p层,或者是mvvm的m层。通过在实际的项目中使用来看,放在m或p层的效果较好,view的复用也比较好做。