Android 多级 Tree 列表实现指南

在 Android 开发中,展示复杂的多级结构数据时,常常需要用到 Tree 列表。这种列表不仅需要支持多层级的显示,还要具备展开和折叠的功能。本文将为你提供实现多级 Tree 列表的基本指南,并附带代码示例。

1. 基本概念

Tree 列表通常用来展示层级关系,如文件管理器、组织架构图等。在 Android 中,我们需要自定义数据模型、适配器和布局,来实现这一功能。

1.1 数据模型

首先,我们需要定义一个节点的数据模型。在树形结构中,每个节点可能拥有多个子节点。我们可以如下实现:

public class TreeNode {
    private String name;
    private List<TreeNode> children;
    private boolean isExpanded;

    public TreeNode(String name) {
        this.name = name;
        this.children = new ArrayList<>();
        this.isExpanded = false;
    }

    public void addChild(TreeNode child) {
        children.add(child);
    }

    public List<TreeNode> getChildren() {
        return children;
    }

    public String getName() {
        return name;
    }

    public boolean isExpanded() {
        return isExpanded;
    }

    public void toggle() {
        isExpanded = !isExpanded;
    }
}

1.2 适配器

接下来,需要创建一个适配器来绑定数据和视图。我们将使用 RecyclerView.Adapter,并重写必要的方法:

public class TreeAdapter extends RecyclerView.Adapter<TreeAdapter.TreeViewHolder> {
    private List<TreeNode> nodes;

    public TreeAdapter(List<TreeNode> nodes) {
        this.nodes = nodes;
    }

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

    @Override
    public void onBindViewHolder(TreeViewHolder holder, int position) {
        TreeNode node = nodes.get(position);
        holder.bind(node);
    }

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

    public class TreeViewHolder extends RecyclerView.ViewHolder {
        private TextView nameTextView;

        public TreeViewHolder(View itemView) {
            super(itemView);
            nameTextView = itemView.findViewById(R.id.name_text_view);
        }

        public void bind(TreeNode node) {
            nameTextView.setText(node.getName());
            itemView.setOnClickListener(v -> {
                node.toggle();
                notifyDataSetChanged();
            });
        }
    }
}

2. 布局文件

布局文件 item_tree_node.xml 可以相对简单,包含一个 TextView 用于显示节点名称:

<LinearLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">

    <TextView
        android:id="@+id/name_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

3. 展示示例图

下面是一个多级树结构的示例饼状图,展示了不同级别下的节点占比情况:

pie
    title Tree Structure Distribution
    "Level 1": 30
    "Level 2": 40
    "Level 3": 20
    "Level 4": 10

4. 类图示例

以下是用于表示树节点的类图:

classDiagram
class TreeNode {
    +String name
    +List<TreeNode> children
    +boolean isExpanded
    +void toggle()
    +List<TreeNode> getChildren()
}

5. 结尾

通过以上步骤,我们实现了一个基础的多级 Tree 列表。在实际项目中,你可以根据需求扩展节点的展示和交互特性。希望本指南对你在 Android 开发中实现 Tree 列表有所帮助。如果你对多级结构有更多需求,不妨深入研究相关设计模式以提升代码的可维护性。