Android 二级 RecyclerView 实现

在 Android 开发中,RecyclerView 是一个非常灵活和高效的控件,用于显示大量数据。对于需要嵌套列表的场景,二级 RecyclerView 是一种常见的实现方式。本文将介绍如何实现二级 RecyclerView,并提供相关的代码示例。

使用场景

二级 RecyclerView 通常用于显示多层数据结构。例如,旅行计划中可以包含多个目的地,每个目的地下有多个活动。我们可以利用二级 RecyclerView 来展示这样的数据。

基本步骤

实现二级 RecyclerView 一般包括以下步骤:

  1. 创建数据模型
  2. 实现外层适配器和内层适配器
  3. 在布局中配置 RecyclerView
  4. 设置适配器和数据源

1. 数据模型

首先,我们需要定义数据模型。这里我们定义两个简单的模型:DestinationActivity

public class Activity {
    private String name;

    public Activity(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

public class Destination {
    private String name;
    private List<Activity> activities;

    public Destination(String name, List<Activity> activities) {
        this.name = name;
        this.activities = activities;
    }

    public String getName() {
        return name;
    }

    public List<Activity> getActivities() {
        return activities;
    }
}

2. 实现适配器

接下来,我们需要实现两个适配器。外层适配器用于显示目的地,内层适配器用于显示每个目的地下的活动。

外层适配器
public class DestinationAdapter extends RecyclerView.Adapter<DestinationAdapter.DestinationViewHolder> {
    private List<Destination> destinationList;

    public DestinationAdapter(List<Destination> destinationList) {
        this.destinationList = destinationList;
    }

    @Override
    public DestinationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_destination, parent, false);
        return new DestinationViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DestinationViewHolder holder, int position) {
        Destination destination = destinationList.get(position);
        holder.bind(destination);
    }

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

    class DestinationViewHolder extends RecyclerView.ViewHolder {
        private RecyclerView activityRecyclerView;

        public DestinationViewHolder(View itemView) {
            super(itemView);
            activityRecyclerView = itemView.findViewById(R.id.recycler_view_activities);
        }

        public void bind(Destination destination) {
            // 显示目的地的名字、设置内层 RecyclerView 等
            ActivityAdapter activityAdapter = new ActivityAdapter(destination.getActivities());
            activityRecyclerView.setLayoutManager(new LinearLayoutManager(itemView.getContext()));
            activityRecyclerView.setAdapter(activityAdapter);
        }
    }
}
内层适配器
public class ActivityAdapter extends RecyclerView.Adapter<ActivityAdapter.ActivityViewHolder> {
    private List<Activity> activityList;

    public ActivityAdapter(List<Activity> activityList) {
        this.activityList = activityList;
    }

    @Override
    public ActivityViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_activity, parent, false);
        return new ActivityViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ActivityViewHolder holder, int position) {
        Activity activity = activityList.get(position);
        holder.bind(activity);
    }

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

    class ActivityViewHolder extends RecyclerView.ViewHolder {
        public void bind(Activity activity) {
            // 显示活动的名字
        }
    }
}

3. 布局配置

在 XML 布局文件中,需要配置外层和内层的 RecyclerView。以下是一个简单的布局示例:

<!-- item_destination.xml -->
<LinearLayout ...>
    <TextView ... />
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view_activities"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>
<!-- item_activity.xml -->
<LinearLayout ...>
    <TextView ... />
</LinearLayout>

4. 设置适配器和数据源

最后,在活动或片段中,设置外层适配器并传入数据源。

RecyclerView recyclerView = findViewById(R.id.recycler_view_destinations);
DestinationAdapter adapter = new DestinationAdapter(destinationList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);

结尾

通过以上步骤,我们成功实现了一个二级 RecyclerView。利用二级 RecyclerView,开发者可以轻松地展示具有层级结构的数据,让用户体验更加丰富和直观。在旅行计划的展示中,二级 RecyclerView 可以很大程度上提升信息的组织性,使得用户能快速获取所需信息。

接下来,我们可以利用 mermaid 语法来呈现一些可视化数据。

旅行计划流程图

journey
    title 旅行计划
    section 计划阶段
      搜索目的地: 5: 旅客
      选择目的地: 4: 旅客
    section 活动安排
      安排活动: 3: 导游
      确认时间: 2: 旅客

活动类型分布饼状图

pie
    title 活动类型分布
    "文化活动": 45
    "户外活动": 30
    "美食活动": 25

以上内容展示了二级 RecyclerView 的基本实现和应用场景,以及借助 mermaid 语法进行数据可视化的可能性。希望对你有所帮助!