写一个简单的recyclerview带不同标题不同列表
时间: 2023-07-31 07:08:57 浏览: 53
以下是一个示例代码,演示如何在 RecyclerView 中创建带有不同标题和不同列表项的多个列表:
1. 首先,创建一个布局文件来显示 RecyclerView 和列表项。这里我们将使用 CardView 来装饰每个列表项:
```xml
<!-- activity_main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp"
android:background="#F0F0F0"
/>
```
```xml
<!-- list_item.xml -->
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="8dp"
app:cardElevation="4dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
>
<TextView
android:id="@+id/textViewTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#000000"
android:padding="8dp"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewItems"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
/>
</androidx.cardview.widget.CardView>
```
2. 接下来,我们创建一个数据模型类,用于表示每个列表的标题和项。这里我们使用了一个名为 `ListModel` 的类:
```java
public class ListModel {
private String title;
private List<String> items;
public ListModel(String title, List<String> items) {
this.title = title;
this.items = items;
}
public String getTitle() {
return title;
}
public List<String> getItems() {
return items;
}
}
```
3. 然后,我们创建一个适配器类,用于将数据模型绑定到 RecyclerView 中的视图。在适配器中,我们使用了一个名为 `HeaderViewHolder` 的视图持有者类,用于显示每个列表的标题,以及一个名为 `ItemViewHolder` 的视图持有者类,用于显示每个列表项。
```java
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<ListModel> data;
public MyAdapter(List<ListModel> data) {
this.data = data;
}
@Override
public int getItemCount() {
return data.size();
}
@Override
public int getItemViewType(int position) {
return position;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == 0) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
return new HeaderViewHolder(view);
} else {
View view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
return new ItemViewHolder(view);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (getItemViewType(position) == 0) {
HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder;
headerViewHolder.textViewTitle.setText(data.get(position).getTitle());
} else {
ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
itemViewHolder.textViewItem.setText(data.get(position).getItems().get(position - 1));
}
}
private class HeaderViewHolder extends RecyclerView.ViewHolder {
TextView textViewTitle;
HeaderViewHolder(View itemView) {
super(itemView);
textViewTitle = itemView.findViewById(R.id.textViewTitle);
}
}
private class ItemViewHolder extends RecyclerView.ViewHolder {
TextView textViewItem;
ItemViewHolder(View itemView) {
super(itemView);
textViewItem = itemView.findViewById(android.R.id.text1);
}
}
}
```
4. 最后,我们在 Activity 中初始化 RecyclerView,并将适配器设置为它。我们使用了一个名为 `getData` 的辅助方法来生成数据并填充到适配器中。
```java
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyAdapter(getData());
recyclerView.setAdapter(adapter);
}
private List<ListModel> getData() {
List<ListModel> data = new ArrayList<>();
List<String> items1 = new ArrayList<>();
items1.add("Item 1-1");
items1.add("Item 1-2");
items1.add("Item 1-3");
items1.add("Item 1-4");
items1.add("Item 1-5");
ListModel model1 = new ListModel("List 1", items1);
data.add(model1);
List<String> items2 = new ArrayList<>();
items2.add("Item 2-1");
items2.add("Item 2-2");
items2.add("Item 2-3");
items2.add("Item 2-4");
ListModel model2 = new ListModel("List 2", items2);
data.add(model2);
List<String> items3 = new ArrayList<>();
items3.add("Item 3-1");
items3.add("Item 3-2");
items3.add("Item 3-3");
ListModel model3 = new ListModel("List 3", items3);
data.add(model3);
return data;
}
}
```
在这个示例中,我们创建了三个列表,每个列表都有一个标题和多个列表项。我们使用了 `CardView` 来包装每个列表项,以产生阴影和圆角效果。你可以根据需要修改布局和视图持有者来创建自己的多列表 RecyclerView。