android——RecyclerView通用适配器
2022/9/13 23:20:31
本文主要是介绍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));
这篇关于android——RecyclerView通用适配器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升