Android 常用的设计模式 八 (Adapter(适配器)模式)

  1. MVC(Model-View-Controller)模式
  2. MVP(Model-View-Presenter)模式
  3. MVVM(Model-View-ViewModel)模式
  4. Singleton(单例)模式
  5. Factory(工厂)模式
  6. Observer(观察者)模式
  7. Strategy(策略)模式
  8. Adapter(适配器)模式

这些设计模式都有不同的特点和用途,在开发 Android 应用程序时可以根据具体的需求进行选择。

在 Android 中,Adapter 模式是一种常见的设计模式,用于将一种类型的对象转换为另一种类型的对象,以便它们可以一起工作。通常,Adapter 模式用于将一个不兼容的类转换成另一个兼容的类,以便它可以与其他类进行交互。

在 Android 中,Adapter 模式通常用于实现列表、网格和滑动视图等 UI 控件,以便它们可以显示特定的数据集。例如,可以使用适配器模式将数据集中的数据与 ListView 控件关联起来。

下面是一个使用适配器模式实现 ListView 控件的示例代码:

首先,我们创建一个数据模型类,表示 ListView 中的单个条目:

public class ListItem {
    private String mTitle;
    private String mSubtitle;

    public ListItem(String title, String subtitle) {
        mTitle = title;
        mSubtitle = subtitle;
    }

    public String getTitle() {
        return mTitle;
    }

    public String getSubtitle() {
        return mSubtitle;
    }
}

然后,我们创建一个自定义适配器类,继承自 BaseAdapter 类,以便将数据集中的数据与 ListView 控件关联起来:

public class MyListAdapter extends BaseAdapter {
    private List<ListItem> mListItems;
    private Context mContext;

    public MyListAdapter(Context context, List<ListItem> listItems) {
        mContext = context;
        mListItems = listItems;
    }

    @Override
    public int getCount() {
        return mListItems.size();
    }

    @Override
    public Object getItem(int position) {
        return mListItems.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
        }

        ListItem item = mListItems.get(position);

        TextView titleTextView = convertView.findViewById(R.id.title_text_view);
        titleTextView.setText(item.getTitle());

        TextView subtitleTextView = convertView.findViewById(R.id.subtitle_text_view);
        subtitleTextView.setText(item.getSubtitle());

        return convertView;
    }

在 MyListAdapter 类中,我们实现了 getCount()、getItem()、getItemId() 和 getView() 方法,以便将数据集中的数据与 ListView 控件关联起来。getView() 方法中的代码负责将数据绑定到 ListView 中的单个条目。

最后,我们可以将数据集和自定义适配器类传递给 ListView 控件,以便在 ListView 中显示数据:

ListView listView = findViewById(R.id.list_view);
List<ListItem> listItems = new ArrayList<>();
listItems.add(new ListItem("Item 1", "Subtitle 1"));
listItems.add(new ListItem("Item 2", "Subtitle 2"));
listItems.add(new ListItem("Item 3", "Subtitle 3"));
listItems.add(new ListItem("Item 4", "Subtitle 4"));
listView.setAdapter(new MyListAdapter(this, listItems));

 这里,我们使用了自定义适配器类将数据集中的数据与 ListView 控件关联起来,以便在 ListView 中显示数据

还有RecycleView示例:

当我们需要将一种对象转换成另一种对象时,使用适配器模式。适配器模式旨在使现有的类与新类兼容,以便它们可以一起工作。在 Android 开发中,适配器模式通常用于将数据转换成视图或布局,以便它们可以在 UI 上显示。

适配器模式的示例代码:

假设我们有一个 RecyclerView 需要显示一系列的数据项。我们有一个现有的数据源,返回数据为 ArrayList 的形式。我们希望在 RecyclerView 中使用自定义布局来显示这些数据。

定义适配器接口:

public interface Adapter {
    public void onBindViewHolder(ViewHolder holder, int position);
    public int getItemCount();
}

创建实现适配器接口的具体适配器类:

public class MyAdapter implements Adapter {
    private ArrayList<Data> mDataList;
    
    public MyAdapter(ArrayList<Data> dataList) {
        mDataList = dataList;
    }
    
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Data data = mDataList.get(position);
        holder.bind(data);
    }
    
    @Override
    public int getItemCount() {
        return mDataList.size();
    }
}

定义 ViewHolder 类:

public class ViewHolder extends RecyclerView.ViewHolder {
    private TextView mTitleTextView;
    private TextView mDescriptionTextView;
    
    public ViewHolder(View itemView) {
        super(itemView);
        
        mTitleTextView = itemView.findViewById(R.id.title_text_view);
        mDescriptionTextView = itemView.findViewById(R.id.description_text_view);
    }
    
    public void bind(Data data) {
        mTitleTextView.setText(data.getTitle());
        mDescriptionTextView.setText(data.getDescription());
    }
}

创建 RecyclerView 并设置适配器:

public class MainActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private Adapter mAdapter;
    private ArrayList<Data> mDataList;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mRecyclerView = findViewById(R.id.recycler_view);
        
        mDataList = getData();
        
        mAdapter = new MyAdapter(mDataList);
        
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    }
    
    private ArrayList<Data> getData() {
        // Get the data from the data source
        ArrayList<Data> dataList = new ArrayList<>();
        dataList.add(new Data("Title 1", "Description 1"));
        dataList.add(new Data("Title 2", "Description 2"));
        dataList.add(new Data("Title 3", "Description 3"));
        return dataList;
    }
}

在这个例子中,MyAdapter 类作为适配器将 ArrayList 中的数据转换为可以由 RecyclerView 显示的视图。ViewHolder 类用于保存与布局相关的视图的引用。onBindViewHolder 方法由 RecyclerView 调用以在特定位置显示数据,而 getItemCount 方法返回数据集中的项的总数。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值