记一次使用开源项目FlexibleAdapter
前序
经过一段时间的学习,认识到了Android的ListView和RecyclerView,用这两个控件进行了开发,最后发现前者已经逐渐显现出弊端,后者实现效果则需要进行不少的工作,于是再github找到了这么一个RecyclerView的开源项目 FlexibleAdapter.
项目不大却有如此多的功能实现,让我认识到自己还有很长一段路要走,也希望通过这次使用开源项目过程中提升自己。
坎坷
勉强用翻译看完了github上的介绍,第一个想法是百度看看有没有其他人使用的心得,结果...几乎没有,百度关于FlexibleAdapter的寥寥几篇文章还都只是github. README的复制文章。所以只能使用项目的wiki上浏览教程【FlexibleAdapter - wiki】。
我也该改变自己的想法,不能一味的依赖别人的心得,也需要自己理解,凝结自己的心得。
依靠翻译加上自己的理解和手动,完成了FlexibleAdapter的简单使用,把之前用ListView和RecyclerView实现的功能,用FlexibleAdapter实现。
食用
添加依赖
app > gradle.build添加依赖
dependencies {
// Using JCenter
implementation 'eu.davidea:flexible-adapter:5.1.0'
implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
implementation 'eu.davidea:flexible-adapter-livedata:1.0.0-b3'
// From 1.0.0-b3, library is compiled with data binding v2
implementation 'eu.davidea:flexible-adapter-databinding:1.0.0'
}
首先在activity_main.xml添加RecyclerView,如果没有添加包则添加:
implementation 'androidx.recyclerview:recyclerview:1.1.0'
flexible_adapter_activity_main
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
然后是定义每一个item的布局xml,在网上找了一组枪的数据,图片和文字放在了assets文件夹内进行关联,并使用AssetsReader读取。
flexible_adapter_item_flexible.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/gun_img"
android:layout_width="200dp"
android:src="@mipmap/ic_launcher_round"
android:layout_height="match_parent"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/gun_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"/>
<TextView
android:id="@+id/gun_introduction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10dp"
android:layout_margin="16dp"
android:text="Medium Text"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
然后我们需要定义项目,也就是Item类;不同的是这个对象需要继承AbstractFlexibleItem<yourItem.yourViewHolder>,yourItem.yourViewHolder就是当前类和类中的ViewHolder.
然后我们需要重写这5个方法
-
public boolean equals(Object o)
- item相同的情况
-
public int hashCode()
- 如果重写了上面的方法,最好也重写这个
-
public int getLayoutRes()
- 获取项目类型id值
-
public yourViewHolder createViewHolder(View view, FlexibleAdapter
adapter) - 负责每个子项的布局
-
public void bindViewHolder(FlexibleAdapter
adapter, yourViewHolder holder, int position, List