legongju.com
我们一直在努力
2024-12-29 13:01 | 星期天

ExpandableListView的适配器怎么写

ExpandableListView 的适配器需要继承自 BaseAdapter,并重写其中的方法。以下是一个简单的示例:

首先,创建一个自定义的 ExpandableListAdapter 类:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

public class MyExpandableListAdapter extends BaseAdapter {

    private Context context;
    private List groupHeaders;
    private List> childItems;

    public MyExpandableListAdapter(Context context, List groupHeaders, List> childItems) {
        this.context = context;
        this.groupHeaders = groupHeaders;
        this.childItems = childItems;
    }

    @Override
    public int getCount() {
        // 返回数据的总行数,包括分组和子项
        return groupHeaders.size() + childItems.size();
    }

    @Override
    public Object getItem(int position) {
        // 返回指定位置的数据项
        if (position < groupHeaders.size()) {
            return groupHeaders.get(position);
        } else {
            return childItems.get(position - groupHeaders.size());
        }
    }

    @Override
    public long getItemId(int position) {
        // 返回指定位置的 ID,通常可以使用 position 作为 ID
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 返回指定位置的视图
        if (position < groupHeaders.size()) {
            // 如果是分组标题,则使用 groupHeaders 中的数据
            TextView textView = (TextView) convertView;
            if (convertView == null) {
                textView = (TextView) LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false);
            }
            textView.setText(groupHeaders.get(position));
            return textView;
        } else {
            // 如果是子项,则使用 childItems 中的数据
            TextView textView = (TextView) convertView;
            if (convertView == null) {
                textView = (TextView) LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false);
            }
            textView.setText(childItems.get(position - groupHeaders.size()).get(0));
            return textView;
        }
    }

    @Override
    public int getGroupCount() {
        // 返回分组的数量
        return groupHeaders.size();
    }

    @Override
    public int getGroupView(int groupPosition, View convertView, ViewGroup parent) {
        // 返回分组标题的视图
        TextView textView = (TextView) convertView;
        if (convertView == null) {
            textView = (TextView) LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false);
        }
        textView.setText(groupHeaders.get(groupPosition));
        return textView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        // 返回子项是否可选中,通常设置为 true
        return true;
    }
}

接下来,在你的 ActivityFragment 中设置适配器:

import android.os.Bundle;
import android.widget.ExpandableListView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ExpandableListView expandableListView;
    private MyExpandableListAdapter adapter;

    private List groupHeaders;
    private List> childItems;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        expandableListView = findViewById(R.id.expandableListView);

        // 准备数据
        groupHeaders = new ArrayList<>();
        childItems = new ArrayList<>();

        groupHeaders.add("Group 1");
        List childItem1 = new ArrayList<>();
        childItem1.add("Child 1.1");
        childItem1.add("Child 1.2");
        childItems.add(childItem1);

        groupHeaders.add("Group 2");
        List childItem2 = new ArrayList<>();
        childItem2.add("Child 2.1");
        childItem2.add("Child 2.2");
        childItems.add(childItem2);

        // 设置适配器
        adapter = new MyExpandableListAdapter(this, groupHeaders, childItems);
        expandableListView.setAdapter(adapter);
    }
}

这样,你就创建了一个简单的 ExpandableListView 适配器。你可以根据需要修改数据结构和视图样式。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/64813.html

相关推荐

  • ExpandableListView的样式如何设置

    ExpandableListView的样式如何设置

    要设置ExpandableListView的样式,您需要遵循以下步骤: 在res/values目录下创建或修改styles.xml文件。 在styles.xml文件中,定义一个新的样式,继承自Base.The...

  • ExpandableListView的展开收起逻辑

    ExpandableListView的展开收起逻辑

    ExpandableListView 是 Android 中一个可展开和收起列表项的视图。它允许用户点击一个列表项来展开它,显示其子列表项,再次点击该列表项则会收起它。以下是 Exp...

  • 如何在ExpandableListView中嵌套

    如何在ExpandableListView中嵌套

    在Android中,要在ExpandableListView中嵌套子列表,您需要创建一个自定义的适配器,该适配器继承自BaseAdapter 首先,创建一个自定义的ExpandableListAdapter类...

  • ExpandableListView的点击事件处理

    ExpandableListView的点击事件处理

    ExpandableListView 的点击事件处理可以通过以下步骤实现: 首先,在你的布局文件中添加一个 ExpandableListView。例如: 创建一个自定义的 BaseExpandableListA...

  • 如何自定义ExpandableListView

    如何自定义ExpandableListView

    要自定义ExpandableListView,你可以按照以下步骤进行: 创建布局文件:首先,你需要为ExpandableListView创建一个布局文件。这个文件将定义每个子项和组头的布局...

  • ExpandableListView怎样实现

    ExpandableListView怎样实现

    ExpandableListView是Android中的一种列表视图,它允许用户展开和折叠每个列表项以显示子项。要实现ExpandableListView,你需要遵循以下步骤: 创建布局文件:

  • C# XML性能优化的建议

    C# XML性能优化的建议

    在C#中处理XML时,性能优化是一个重要的考虑因素。以下是一些建议,可以帮助你提高C#中XML处理的性能: 使用流式处理: 使用XmlReader或XmlTextReader进行流式读...

  • 怎样用vi编辑器编写脚本

    怎样用vi编辑器编写脚本

    使用 vi 编辑器编写脚本主要遵循以下步骤: 启动 vi 编辑器:在终端中输入 vi 或 vim(取决于你的系统配置)并回车。这将打开一个新的 vi 编辑器实例。
    创建...