android 多级列表
时间: 2023-06-30 12:06:25 浏览: 121
Android中多级列表可以通过RecyclerView嵌套实现。下面是一个简单的示例:
1. 创建外层RecyclerView的Adapter。
```
public class OuterAdapter extends RecyclerView.Adapter<OuterAdapter.ViewHolder> {
private List<OuterModel> mData;
public OuterAdapter(List<OuterModel> data) {
mData = data;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_outer, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
OuterModel outerModel = mData.get(position);
holder.txtTitle.setText(outerModel.getTitle());
InnerAdapter innerAdapter = new InnerAdapter(outerModel.getInnerList());
holder.recyclerView.setLayoutManager(new LinearLayoutManager(holder.recyclerView.getContext()));
holder.recyclerView.setAdapter(innerAdapter);
}
@Override
public int getItemCount() {
return mData.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView txtTitle;
RecyclerView recyclerView;
ViewHolder(@NonNull View itemView) {
super(itemView);
txtTitle = itemView.findViewById(R.id.txt_title);
recyclerView = itemView.findViewById(R.id.recycler_view);
}
}
}
```
2. 创建内层RecyclerView的Adapter。
```
public class InnerAdapter extends RecyclerView.Adapter<InnerAdapter.ViewHolder> {
private List<InnerModel> mData;
public InnerAdapter(List<InnerModel> data) {
mData = data;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_inner, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
InnerModel innerModel = mData.get(position);
holder.txtTitle.setText(innerModel.getTitle());
}
@Override
public int getItemCount() {
return mData.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView txtTitle;
ViewHolder(@NonNull View itemView) {
super(itemView);
txtTitle = itemView.findViewById(R.id.txt_title);
}
}
}
```
3. 创建数据模型类。
```
public class OuterModel {
private String title;
private List<InnerModel> innerList;
public OuterModel(String title, List<InnerModel> innerList) {
this.title = title;
this.innerList = innerList;
}
public String getTitle() {
return title;
}
public List<InnerModel> getInnerList() {
return innerList;
}
}
public class InnerModel {
private String title;
public InnerModel(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}
```
4. 创建布局文件。
item_outer.xml:
```
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/txt_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="bold" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
```
item_inner.xml:
```
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/txt_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:textSize="16sp" />
```
5. 在Activity或Fragment中使用多级列表。
```
public class MultiLevelListActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private OuterAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multi_level_list);
List<OuterModel> data = new ArrayList<>();
List<InnerModel> innerList1 = new ArrayList<>();
innerList1.add(new InnerModel("Inner 1-1"));
innerList1.add(new InnerModel("Inner 1-2"));
data.add(new OuterModel("Outer 1", innerList1));
List<InnerModel> innerList2 = new ArrayList<>();
innerList2.add(new InnerModel("Inner 2-1"));
innerList2.add(new InnerModel("Inner 2-2"));
innerList2.add(new InnerModel("Inner 2-3"));
data.add(new OuterModel("Outer 2", innerList2));
List<InnerModel> innerList3 = new ArrayList<>();
innerList3.add(new InnerModel("Inner 3-1"));
data.add(new OuterModel("Outer 3", innerList3));
mRecyclerView = findViewById(R.id.recycler_view);
mAdapter = new OuterAdapter(data);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mAdapter);
}
}
```
以上就是一个简单的Android多级列表的实现方式。