???作者簡介:大家好,我是 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>
)轉換為可以在屏幕上顯示的列表項視圖。
最后,
? ? ? ? 其它設計模式會陸續更新,希望文章對你有所幫助!