Android RecyclerView用Java写一个多布局的Adapter
时间: 2024-06-09 08:06:40 浏览: 6
好的,以下是一个基本的多布局 RecyclerView Adapter 的示例代码。假设我们有两种不同的布局类型:类型1和类型2。
首先,我们需要创建一个 ViewHolder 的基类,它将存储我们的布局中的所有视图。
```java
public abstract class BaseViewHolder extends RecyclerView.ViewHolder {
public BaseViewHolder(View itemView) {
super(itemView);
}
public abstract void bindData(Object data);
}
```
然后,我们需要创建两个具体的 ViewHolder 类,分别对应我们的两种不同的布局类型。
ViewHolder 类型1:
```java
public class Type1ViewHolder extends BaseViewHolder {
private TextView titleTextView;
private TextView subtitleTextView;
public Type1ViewHolder(View itemView) {
super(itemView);
titleTextView = itemView.findViewById(R.id.titleTextView);
subtitleTextView = itemView.findViewById(R.id.subtitleTextView);
}
public void bindData(Object data) {
Type1Data type1Data = (Type1Data) data;
titleTextView.setText(type1Data.getTitle());
subtitleTextView.setText(type1Data.getSubtitle());
}
}
```
ViewHolder 类型2:
```java
public class Type2ViewHolder extends BaseViewHolder {
private ImageView imageView;
public Type2ViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
}
public void bindData(Object data) {
Type2Data type2Data = (Type2Data) data;
Picasso.get().load(type2Data.getImageUrl()).into(imageView);
}
}
```
接下来,我们需要创建一个 RecyclerView.Adapter 类,并在其中实现 onCreateViewHolder、getItemViewType 和 onBindViewHolder 方法。
```java
public class MultiLayoutAdapter extends RecyclerView.Adapter<BaseViewHolder> {
private List<Object> dataList;
public MultiLayoutAdapter(List<Object> dataList) {
this.dataList = dataList;
}
@Override
public int getItemViewType(int position) {
// 根据数据类型返回对应的布局类型
Object data = dataList.get(position);
if (data instanceof Type1Data) {
return 0;
} else if (data instanceof Type2Data) {
return 1;
}
return -1;
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// 根据布局类型返回对应的 ViewHolder
if (viewType == 0) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_type1, parent, false);
return new Type1ViewHolder(view);
} else if (viewType == 1) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_type2, parent, false);
return new Type2ViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(BaseViewHolder holder, int position) {
// 绑定数据
holder.bindData(dataList.get(position));
}
@Override
public int getItemCount() {
return dataList.size();
}
}
```
最后,在您的 Activity 或 Fragment 中,您可以像这样使用这个适配器:
```java
List<Object> dataList = new ArrayList<>();
dataList.add(new Type1Data("Title 1", "Subtitle 1"));
dataList.add(new Type2Data("https://example.com/image.jpg"));
MultiLayoutAdapter adapter = new MultiLayoutAdapter(dataList);
recyclerView.setAdapter(adapter);
```
这样,您就可以使用 RecyclerView.Adapter 和多个 ViewHolder 来实现一个多布局的 RecyclerView Adapter。