适配器 Android

在Android开发中,适配器(Adapter)是一种常见的设计模式,用于将数据和界面进行绑定,实现数据的展示。适配器在Android中的应用非常广泛,最常见的例子就是ListView和RecyclerView的适配器。

适配器的作用是将数据源和显示层进行解耦,使得数据的变化不会影响到界面的显示。通过适配器模式,我们可以轻松地实现数据的展示和交互。

ListView适配器示例

下面是一个使用ListView的适配器的示例:

public class MyAdapter extends BaseAdapter {
    private List<String> mData;
    private Context mContext;

    public MyAdapter(List<String> data, Context context) {
        mData = data;
        mContext = context;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
            holder = new ViewHolder();
            holder.textView = convertView.findViewById(R.id.text_view);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        String item = mData.get(position);
        holder.textView.setText(item);

        return convertView;
    }

    private static class ViewHolder {
        TextView textView;
    }
}

在上面的代码中,我们自定义了一个MyAdapter类,继承自BaseAdapter。在适配器的构造方法中,我们传入了数据源和上下文。在getView()方法中,我们使用ViewHolder模式来复用布局,并将数据绑定到界面上。

RecyclerView适配器示例

对于RecyclerView,适配器的写法略有不同:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> mData;
    private Context mContext;

    public MyAdapter(List<String> data, Context context) {
        mData = data;
        mContext = context;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        String item = mData.get(position);
        holder.textView.setText(item);
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.text_view);
        }
    }
}

在上面的代码中,我们同样自定义了一个MyAdapter类,这次继承自RecyclerView.Adapter。在 onCreateViewHolder()方法中,我们创建并返回一个ViewHolder对象。在 onBindViewHolder()方法中,我们将数据绑定到ViewHolder中的控件上。在 getItemCount()方法中,我们返回数据源的大小。

这两个示例中的适配器都用到了布局文件R.layout.list_item,我们可以根据实际需要进行修改。

总结

适配器是Android开发中常用的设计模式之一,用于将数据和界面进行解耦,实现数据的展示和交互。适配器模式可以使得我们的代码更加清晰,易于维护和扩展。

通过上面的例子,我们可以看到,在ListView和RecyclerView中,适配器的使用方法基本相同,只是继承的基类不同。

希望本文能帮助你更好地理解和使用适配器模式。