BaseRecyclerViewAdapterHelper
BaseRecyclerViewAdapterHelper copied to clipboard
BaseQuickAdapter能改成原来那种可以在参数里传递资源id的吗?
这是我之前重写3.x版本的BaseQuickAdapter的adapter基类,这样就只需要在子类重写convert方法设置item数据就行了,不需要onCreateViewHolder回调
abstract class BaseAdapter<T>(@LayoutRes private val layoutResId: Int, data: MutableList<T>? = null) :
BaseQuickAdapter<T, BaseViewHolder>(layoutResId, data)
class SimpleAdapter(dataList: MutableList<Response>) : BaseAdapter<Response>(R.layout.item_simple_list, dataList) {
override fun convert(holder: BaseViewHolder, item: Response) {
......
}
}
你可以自己继承在封装啊。我觉得他的这种方式比较好适合viewbinding不然不方便扩展。
你可以自己继承在封装啊。我觉得他的这种方式比较好适合viewbinding不然不方便扩展。
😂在参数里绑定viewbinding更方便些吧,现在的BaseQuickAdapter没法直接继承在参数里设置,不大会改😥
你可以自己继承在封装啊。我觉得他的这种方式比较好适合viewbinding不然不方便扩展。
😂在参数里绑定viewbinding更方便些吧,现在的BaseQuickAdapter没法直接继承在参数里设置,不大会改😥
我都不会在参数里面设置viewbinding直接使用反射来获取viewbinding更方便。不然每次都是写重复代码难受很
我都不会在参数里面设置viewbinding直接使用反射来获取viewbinding更方便。不然每次都是写重复代码难受很
😂我原来接手过的一个项目在基类里封装的,然后子类继承一下,在泛型里写的,虽然是java的
public class BackFragment extends BaseMvvmFragment<FragmentBackBinding, ViewModel, BaseResponse> {}
public abstract class BaseMvvmFragment<VIEW extends ViewBinding,
VIEW_MODEL extends BaseMvvmViewModel,
DATA> extends Fragment implements Observer {
protected VIEW_MODEL sViewModel;
protected VIEW sViewBinding;
protected BaseMvvmModel mvvmModelTag;
protected BaseMvvmModel sLoadServiceMvvmModelTag;
protected abstract View getLoadSirView();
public abstract VIEW_MODEL getViewModel();
public abstract class BaseMvvmFragment<VIEW extends ViewBinding, VIEW_MODEL extends BaseMvvmViewModel, DATA> extends Fragment implements Observer { protected VIEW_MODEL sViewModel; protected VIEW sViewBinding; protected BaseMvvmModel mvvmModelTag; protected BaseMvvmModel sLoadServiceMvvmModelTag; protected abstract View getLoadSirView(); public abstract VIEW_MODEL getViewModel();
简单封装一下这样子使用不是更简单了,只在泛型里面写Viewbinding就可以实现在获取Viewbinding了,然后直接使用
他的使用方式就是没有封装的
封装后使用
可以😉
写了个基类,和原来用的那种差不多了😉
abstract class AppAdapter<T>(@LayoutRes private val layoutResId: Int, data: List<T> = emptyList()) : BaseQuickAdapter<T, QuickViewHolder>(data) {
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): QuickViewHolder {
return QuickViewHolder(layoutResId, parent)
}
}
他的使用方式就是没有封装的
封装后使用
很不错的封装。里面是用的反射么?
是的通过反射直接获取泛型Viewbinding,不用在子类中获取不然有点繁琐有点繁琐。
他的使用方式就是没有封装的
封装后使用
很不错的封装。里面是用的反射么?
是的通过反射直接获取泛型Viewbinding,不用在子类中获取不然有点繁琐。
他的使用方式就是没有封装的
封装后使用
很不错的封装。里面是用的反射么?
上面的文件就是针对你的文件进行了Viewbinding的封装的文件你可以放到你library里面。使用都是和上面的例子一样
他的使用方式就是没有封装的
封装后使用
很不错的封装。里面是用的反射么?
Viewbinding.zip 上面的文件就是针对你的文件进行了Viewbinding的封装的文件你可以放到你library里面。使用都是和上面的例子一样
这个我考虑下,因为之前没有用反射,就是因为有的同学对反射比较反感
其实在MultiItemAdapter添加各种addItemType会导致代码冗余的很,适当的抽离和使用反射会使代码简介很多很多,比如我在项目中的尝试:
class DetailsAdapter : BaseMultiItemAdapter<Floors>() {
init {
// 根据type添加返回type 滑动时会根据对应额Position去创建对应的Holder
onItemViewType { position, list ->
list[position].itemType
}
addDetailsVH(T_BRAND_HEADER.hashCode(), GDBrandHeaderVH::class.java, R.layout.item_vh_details_brand_header)
addDetailsVH(T_TOP_BANNER.hashCode(), GDTopBannerVH::class.java, R.layout.item_vh_details_top_banner)
addDetailsVH(T_PRESALE_PRICE.hashCode(), GDPresalePricesVH::class.java,R.layout.item_vh_details_presale_prices)
addDetailsVH(T_ACTIVITY_PRICE.hashCode(), GDActivityPricesVH::class.java, R.layout.item_vh_activity_prices)
}
/**
* 通过传递的过来的Class类型,创建出对应的ViewHolder
*/
private fun <T : BaseGDVH> addDetailsVH(itemType: Int, vh: Class<T>, @LayoutRes layoutId: Int) {
addItemType(itemType, object : OnMultiItemAdapterListener<Floors, T> {
override fun onCreate(context: Context, parent: ViewGroup, viewType: Int): T {
// 获取到默认的构造方法
val constructors = vh.declaredConstructors[0]
// 获取到绑定的view
val view = LayoutInflater.from(context).inflate(layoutId, parent, false)
return constructors.newInstance(view) as T
}
override fun onBind(holder: T, position: Int, item: Floors?) {
if (item?.data == null) {
holder.onHiddenVh()
return
}
holder.onBindData(item.data)
}
override fun isFullSpanItem(itemType: Int): Boolean {
// 商详的holder都是跨满屏幕
return true
}
})
}
}
这样就能省略很多addItemType的重复代码,而用反射单单创建一个实例应该还是比较容易接受的,但目前我遇到一个问题,就是如果才能更优雅的获取到Holder的实例呢,然后在其他特殊场景下进行数据的传递。