Abstractlistadapters: 简单好用的列表控件数据适配器
该适配器可为ListView
、GridView
、RecyclerView
提供数据适配,通过使用抽象类和java
泛型机制继承传统适配器类,将重复性代码整体封装,在保存ViewHolder
缓存机制的前提下,将适配器的核心功能代码逻辑剥离,使得我们只需要通过编写继承于BaseItemView<T>
的派生类即可完成数据的适配。大大减少了冗余代码的编写工作,让我们能将时间和精力聚焦于核心业务逻辑的编写从而提高编码效率。
BaseRecyclerAdapter<T>
:用于对RecyclerView
的数据适配ModeListAdapter<T>
:用于对ListView
、GridView
的数据适配BaseItemView<T>
:适用于BaseRecyclerAdapter<T>
和ModeListAdapter<T>
的通用Item
布局类,该类承担了Item
视图业务和数据处理业务的整合。通过编写该类的派生类可以定制化的实现各种Item
视图以及对应的数据展示
1. 在项目的根目录中找到 build.gradle
文件 (不是module的build.gradle
文件 ),加入如下代码:
allprojects {
repositories {
maven {
url 'https://raw.githubusercontent.com/walkermanx/mvn-repo/master/Android/Lib/abstractlistadapters/'
}
}
}
2. 在你的项目module的build.gradle
文件中引入依赖:
//建议AndroidStudio3.0以上版本 根据需要使用implementation或者api方式引入依赖
implementation 'com.walkermanx:abstractlistadapters:0.0.1'
//AndroidStudio3.0以下版本
compile 'com.walkermanx:abstractlistadapters:0.0.1'
-
编写自定义的
Item Layout
布局文件:<?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="仓库A" android:textColor="@color/txt_color_black" android:textSize="@dimen/y18" /> </merge>
-
编写
BaseItemView<T>
的派生类:public class AtomBeanItemView extends BaseItemView<Atombean> { TextView tv_title; public AtomBeanItemView(Context context) { this(context, null); } public AtomBeanItemView(Context context, AttributeSet attrs) { super(context, attrs); inflate(context, R.layout.item_warehouse, this); tv_title = (TextView) findViewById(R.id.tv_title); } @Override public void setModel(Atombean model) { super.setModel(model); tv_title.setText(model.getName()); } @Override public void setPosition(int position, int sum) { super.setPosition(position, sum); } @Override public void setSelected(boolean b) { if (b) { setBackgroundColor(0xffdde6fa); tag.setVisibility(VISIBLE); tv_title.setTextColor(0xff5A87EA); } else { setBackgroundColor(0xfff4f4f4); tag.setVisibility(GONE); tv_title.setTextColor(0xff000000); } } }
-
ListView
、GridView
中ListView listView = (ListView) findViewById(R.id.list); listView.setAdapter(new ModeListAdapter<AtomBean>(this) { @NonNull @Override protected BaseItemView GetCurrentModelItemViewInstanceByViewType(Context context, int viewType) { return new AtomBeanItemView(context); } //如果item需要根据ViewType做不同的视图加载,则需要重写getItemViewType 和 getViewTypeCount 方法即可 否则只需要重写GetCurrentModelItemViewInstanceByViewType即可 // getItemViewType返回的数值其取值必须在getViewTypeCount返回的数值之内。 // 也就是如果getViewTypeCount返回的数值是3, // 那么getItemViewType返回的数值就必须是0,1,2三个中的一个 否则无效 @Override public int getItemViewType(int position) { return super.getItemViewType(position); } @Override public int getViewTypeCount() { return super.getViewTypeCount(); } });
-
RecyclerView
中RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list); recyclerView.setAdapter(new BaseRecyclerAdapter<AtomBean>() { @NonNull @Override protected BaseItemView GetCurrentModelItemViewInstanceByViewType(Context context, int viewType) { return new AtomBeanItemView(context); } //如果item需要根据ViewType做不同的视图加载,则需要重写该方法 否则只需要重写GetCurrentModelItemViewInstanceByViewType即可 @Override protected int itemViewType(int pos) { return super.itemViewType(pos); } });
- 有任何问题请邮件联系:[email protected]