用DataBinding做RecycleView适配器(个人笔记)
使用方法
第一步:实例化并传入List,layout的Id,layout的variable的name,在控件里传入类的数据就可以了
如何设置监听事件
如何返回View
全部代码
/**
* Created by Android Studio.
* User: HuangWeiQiang
* Date: 2020/9/22
* Time: 14:50
*/
public class DataBindinAdapter<T> extends RecyclerView.Adapter<DataBindinAdapter.ViewHolder> {
private List<T> list;
private int layoutId, varId;
public DataBindinAdapter(List<T> list, int layoutId, int varId) {
this.list = list;
this.layoutId = layoutId;
this.varId = varId;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), layoutId, parent, false));
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (varId != -1) holder.binding.setVariable(varId, list.get(position));
View view = holder.binding.getRoot();
for (Map.Entry<Integer, OnClick<T>> map : onClickMap.entrySet()
) {
view.findViewById(map.getKey()).setOnClickListener(v -> {
map.getValue().onclick(list.get(position), position);
});
}
for (Map.Entry<Integer, GetView<T>> map : getViewMap.entrySet()
) {
map.getValue().getview(list.get(position), position, view.findViewById(map.getKey()));
}
}
Map<Integer, OnClick<T>> onClickMap = new LinkedHashMap<>();
Map<Integer, GetView<T>> getViewMap = new LinkedHashMap<>();
public void setclick(int id, OnClick<T> onClick) {
if (onClickMap.containsKey(id)) {
return;
}
onClickMap.put(id, onClick);
}
public void getView(int id, GetView<T> getView) {
if (getViewMap.containsKey(id)) {
return;
}
getViewMap.put(id, getView);
}
public interface OnClick<T> {
void onclick(T t, int position);
}
public interface GetView<T> {
void getview(T t, int position, View view);
}
@Override
public int getItemCount() {
return list.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private ViewDataBinding binding;
public ViewHolder(@NonNull ViewDataBinding itemView) {
super(itemView.getRoot());
binding = itemView;
}
}
}