android——RecyclerView通用适配器

ExecFunction编程式接口

public interface ExecFunction {
public void exec(Object data, View view);
}

MyAdapter.java:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
/**
* 抽离出不同点
* 1. 执行上下文
* 2. RecyclerView实例
* 3. 数据源
* 4. 子项视图
* 5. 绑定方法
*/
private List dataResource; // 数据源
private int layoutId ; // 视图资源
private ExecFunction function; // 数据视图绑定
private int len = -1; // 子项渲染个数,-1代表所有
public RecyclerView view; // RecyclerView实例,公共成员变量
/**
* @param activity 渲染RecyclerView所在的Activity实例
* @param resourceId RecyclerView组件id
* @param dataResource 数据源
* @param layoutId 布局id
* @param function 回调方法用于数据与视图的绑定
*/
public MyAdapter(AppCompatActivity activity, int resourceId, List dataResource, int layoutId, ExecFunction function){
this.dataResource = dataResource;
this.layoutId = layoutId;
this.function = function;
this.view = (RecyclerView)activity.findViewById(resourceId);
this.view.setAdapter(this);
}
public void setLength(int length){
this.len = length;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(layoutId,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
View view = holder.getView();
function.exec(dataResource.get(position),view);
}
@Override
public int getItemCount() {
if(this.len>0){
return this.len;
}else if(this.len==0){
throw new RuntimeException("The length must not be 0");
}
return dataResource.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder{
private View view = null;
public ViewHolder(@NonNull View itemView) {
super(itemView);
this.view = itemView;
}
public View getView(){
return view;
}
}
}

使用示例:

MyAdapter adapter = new MyAdapter(this,R.id.recycle_list,list, R.layout.test_view, new ExecFunction() {
@Override
public void exec(Object data, View view) {
final TestBean d = (TestBean) (data);
TextView title = (TextView)view.findViewById(R.id.test_title);
TextView content = (TextView)view.findViewById(R.id.test_content);
content.setText(d.name);
title.setText(String.valueOf(d.age));
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast t = Toast.makeText(this,"点击了"+d.name, Toast.LENGTH_SHORT);
t.show();
}
});
}
});
adapter.setLength(12);
adapter.view.setLayoutManager(new GridLayoutManager(this,4));
posted @   maplerain  阅读(371)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
11:51:20
2025年03月07日
本博客主要为个人学习使用,博主目前为某专科学校大二学生,能力尚有所欠缺,若发现文章中存在错误,请在评论区向博主反映,博主会第一时间进行更改或补充,感谢!
点击右上角即可分享
微信分享提示