✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏: 设计模式
✨特色专栏: 知识分享
🥭本文内容: 23种设计模式------适配器模式(Adapter) 详解
📚 ** ps ** : 阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。
目录
[二、 数据模型(被适配的对象)](#二、 数据模型(被适配的对象))
一、背景
你现在可能对于它有些陌生,但是原生安卓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; // 显示姓名的TextView TextView ageView; // 显示年龄的TextView public UserViewHolder(View itemView) { super(itemView); // 从布局文件中查找对应的视图组件 nameView = itemView.findViewById(R.id.tv_name); ageView = itemView.findViewById(R.id.tv_age); } } // 创建新视图时调用 @Override public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // 加载列表项的布局文件 View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_user, parent, false); return new UserViewHolder(view); } // 将数据绑定到视图上 @Override public void onBindViewHolder(UserViewHolder holder, int position) { User user = users.get(position); // 获取当前位置的数据 holder.nameView.setText(user.getName()); // 设置姓名 holder.ageView.setText(String.valueOf(user.getAge())); // 设置年龄 } // 返回数据总数 @Override public 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>
)转换为可以在屏幕上显示的列表项视图。
最后,
其它设计模式会陆续更新,希望文章对你有所帮助!