RecyclerView的适配器编码方式千篇一律,那就做个通用的吧, 调用简单:
MyRecycleAdapter.setupRecycleView(binding.lstByStation);
binding.lstByStation.setVisibility(View.GONE);
MyDataBindingRecycleAdapter<StationData> lstStationAdapter= new
MyDataBindingRecycleAdapter<>(workStationData, R.layout.plm500_station_item,BR.vo,this);
binding.lstByStation.setAdapter(lstStationAdapter);
上面代码中的BR.vo就是layout plm500_station_item里面的data变量
StationData的代码
public class StationData extends KeyValue<StationHeaderVO,List<T96PdLogVO>> {
public StationData() {
}
public StationData(StationHeaderVO key, List<T96PdLogVO> t96PdLogVOS) {
super(key, t96PdLogVOS);
}
}
StationHeaderVo的代码
public class StationHeaderVO {
private String station;
private String line;
private String time;
...
RecyclerView的item 的layout:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.xxx.extmodules.plm500.activity.PLM500Activity">
<data>
<variable
name="vo"
type="com.xxx.extmodules.plm500.model.StationData" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selectbutton"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/buttonMargin"
android:gravity="left"
android:singleLine="true"
android:text="@{vo.key.station}"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#FFFFF2"
android:textSize="@dimen/reallyBidFontSize"
tools:text="AS01" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/buttonMargin"
android:layout_weight="1"
android:gravity="right"
android:singleLine="true"
android:text="@{vo.key.line+ " "+vo.key.time}"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#FFFFF2"
android:textSize="@dimen/smallFontSize"
tools:text="NB01 12/Sep 14:52" />
</LinearLayout>
</LinearLayout>
</layout>
效果:
通用适配器MyDataBindingRecycleAdapter代码
/***
* 由于as的bug,这个组件不能做到android library里面.
Created by rocklee , 2020/8/29
***/
public class MyDataBindingRecycleAdapter<T> extends RecyclerView.Adapter<DataBindingRecycleViewHolder> {
public interface Event{
void onPaintItem(ViewDataBinding binding, int position, Object data);
}
private List<T> listData;
private LayoutInflater inflater;
private Context context;
private int itemLayoutId;
private int brVar;
private Event event;
public Event getEvent() {
return event;
}
public void setEvent(Event event) {
this.event = event;
}
public MyDataBindingRecycleAdapter(List<T> listData, int itemLayoutId, int brVar, Context
context) {
this.listData = listData;
this.inflater = LayoutInflater.from(context);
this.context=context;
this.brVar=brVar;
this.itemLayoutId=itemLayoutId;
}
@Override
public DataBindingRecycleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ViewDataBinding dataBinding= DataBindingUtil.inflate(inflater, itemLayoutId,parent,false);
return new DataBindingRecycleViewHolder(dataBinding);
}
@Override
public void onBindViewHolder(DataBindingRecycleViewHolder holder, int position) {
T it=listData.get(position);
ViewDataBinding binding=holder.getBinding();
//binding.setVariable(BR.,it);
binding.setVariable(brVar,it);
/*
binding.getRoot().setBackground(context.getDrawable(
it.f1Result.equals("Y")?(
position%2==0?R.drawable.rounded_corner_list_item_parts:R.drawable
.rounded_corner_list_item_parts2):R.drawable
.rounded_corner_list_item_header_rejected));
*/
if (event!=null){
event.onPaintItem(binding,position,it);
}
binding.executePendingBindings(); //刷新list
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemCount() {
return listData.size();
}
}