23种设计模式——适配器模式(Adapter)详解
✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏: 设计模式
✨特色专栏: 知识分享
🥭本文内容: 23种设计模式——适配器模式(Adapter)详解
📚 ** ps ** : 阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。
目录
一、背景
二、 数据模型(被适配的对象)
三、适配器实现(核心适配逻辑)
四、使用适配器(Activity代码)
五、适配器模式对应关系
一、背景
你现在可能对于它有些陌生,但是原生安卓app的列表大部分是使用它来实现的!android项目中有太多地方使用过它了(如下图)。正是有了它,才让数据与图片可以在列表中显示。下面,让我们一起揭开它的神秘面纱吧!
二、 数据模型(被适配的对象)
public class User {private String name; // 用户名private int age; // 用户年龄// 构造函数public User(String name, int age) {this.name = name;this.age = age;}// 获取用户名public String getName() { return name; }// 获取用户年龄public int getAge() { return age; } }
这段代码定义了一个简单的
User
类,包含用户名和年龄两个属性。这个类就是列表中每一列需要显示的数据。
三、适配器实现(核心适配逻辑)
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserViewHolder> {private List<User> users; // 存储用户数据列表// 构造函数,接收数据列表public UserAdapter(List<User> users) {this.users = users;}// 定义ViewHolder,用于缓存视图元素public static class UserViewHolder extends RecyclerView.ViewHolder {TextView nameView; // 显示姓名的TextViewTextView ageView; // 显示年龄的TextViewpublic UserViewHolder(View itemView) {super(itemView);// 从布局文件中查找对应的视图组件nameView = itemView.findViewById(R.id.tv_name);ageView = itemView.findViewById(R.id.tv_age);}}// 创建新视图时调用@Overridepublic UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {// 加载列表项的布局文件View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user, parent, false);return new UserViewHolder(view);}// 将数据绑定到视图上@Overridepublic void onBindViewHolder(UserViewHolder holder, int position) {User user = users.get(position); // 获取当前位置的数据holder.nameView.setText(user.getName()); // 设置姓名holder.ageView.setText(String.valueOf(user.getAge())); // 设置年龄}// 返回数据总数@Overridepublic int getItemCount() {return users.size();} }
这段代码是适配器的核心实现:
继承
RecyclerView.Adapter
并指定ViewHolder类型在构造函数中接收要显示的数据列表
实现三个必要方法:创建视图、绑定数据、返回数据量
四、使用适配器(Activity代码)
// 准备测试数据 List<User> userList = new ArrayList<>(); userList.add(new User("张三", 25)); userList.add(new User("李四", 30));// 获取RecyclerView控件 RecyclerView recyclerView = findViewById(R.id.recyclerView);// 设置布局管理器(决定列表如何排列) recyclerView.setLayoutManager(new LinearLayoutManager(this));// 创建并设置适配器 recyclerView.setAdapter(new UserAdapter(userList));
其实就是页面代码,里面使用了我明定义的列表。这段代码说了适配器的使用:
准备要显示的数据
获取列表控件
设置列表布局方式
创建适配器并绑定数据
五、适配器模式对应关系
Target接口:
RecyclerView.Adapter
定义的接口(onCreateViewHolder
等方法)Adaptee:
List<User>
数据列表(原始数据格式)Adapter:
UserAdapter
类(将数据适配为视图)Client:使用
RecyclerView
的代码(通过适配器间接使用数据)这个例子展示了适配器模式如何将数据列表(
List<User>
)转换为可以在屏幕上显示的列表项视图。
最后,
其它设计模式会陆续更新,希望文章对你有所帮助!