- MVC(Model-View-Controller)模式
- MVP(Model-View-Presenter)模式
- MVVM(Model-View-ViewModel)模式
- Singleton(单例)模式
- Factory(工厂)模式
- Observer(观察者)模式
- Strategy(策略)模式
- 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
方法返回数据集中的项的总数。