SQLite Android ExpandableListView和SQLite数据库

SQLite Android ExpandableListView和SQLite数据库

在本文中,我们将介绍如何在Android应用中使用SQLite数据库和ExpandableListView。SQLite是一种轻量级的关系型数据库,适用于嵌入式设备和移动应用程序。ExpandableListView是Android中的一个可折叠列表视图,可以展示分组数据。

阅读更多:SQLite 教程

1. SQLite数据库简介

SQLite是一种嵌入式关系型数据库引擎,它被广泛应用于移动设备和嵌入式系统。它具有轻量级、零配置、支持事务性操作和跨平台等特点。在Android开发中,SQLite是默认的数据库引擎。

1.1 创建数据库

在Android中创建一个SQLite数据库,我们首先需要创建一个继承自SQLiteOpenHelper的数据库辅助类。这个类负责数据库的创建和版本更新等操作。

public class DBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "mydb";
    private static final int DATABASE_VERSION = 1;

    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表的SQL语句
        String createTableSQL = "CREATE TABLE employees (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
        // 执行SQL语句
        db.execSQL(createTableSQL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库升级的逻辑
        // ...
    }
}

1.2 执行SQL操作

我们可以通过SQLiteDatabase类执行各种数据库操作,如插入、查询和更新等。

DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();

// 插入数据
ContentValues values = new ContentValues();
values.put("name", "张三");
values.put("age", 20);
long insertedId = db.insert("employees", null, values);

// 查询数据
Cursor cursor = db.query("employees", null, null, null, null, null, null);
while (cursor.moveToNext()) {
    int id = cursor.getInt(cursor.getColumnIndex("id"));
    String name = cursor.getString(cursor.getColumnIndex("name"));
    int age = cursor.getInt(cursor.getColumnIndex("age"));
    // 处理数据
}

// 更新数据
ContentValues newValues = new ContentValues();
newValues.put("age", 25);
db.update("employees", newValues, "id = ?", new String[]{String.valueOf(1)});

// 删除数据
db.delete("employees", "id = ?", new String[]{String.valueOf(1)});

cursor.close();
db.close();

2. 使用ExpandableListView显示SQLite数据库数据

ExpandableListView是Android提供的一种可折叠列表,支持显示分组和子项。在使用ExpandableListView显示SQLite数据库数据之前,我们需要先准备好数据。

2.1 准备数据模型

我们先定义两个类,一个表示分组数据,另一个表示子项数据。

public class Group {
    private long id;
    private String name;
    private List<Child> children;

    // 省略getter和setter方法
}

public class Child {
    private long id;
    private String name;

    // 省略getter和setter方法
}

2.2 查询数据库并转换为数据模型

我们在数据库操作中,查询数据后将其转换为Group和Child对象。

List<Group> groups = new ArrayList<>();

// 查询分组数据
Cursor groupCursor = db.query("groups", null, null, null, null, null, null);
while (groupCursor.moveToNext()) {
    Group group = new Group();
    group.setId(groupCursor.getLong(groupCursor.getColumnIndex("id")));
    group.setName(groupCursor.getString(groupCursor.getColumnIndex("name")));
    groups.add(group);

    // 查询子项数据
    Cursor childCursor = db.query("children", null, "group_id = ?", new String[]{String.valueOf(group.getId())}, null, null, null);
    List<Child> children = new ArrayList<>();
    while (childCursor.moveToNext()) {
        Child child = new Child();
        child.setId(childCursor.getLong(childCursor.getColumnIndex("id")));
        child.setName(childCursor.getString(childCursor.getColumnIndex("name")));
        children.add(child);
    }
    group.setChildren(children);

    childCursor.close();
}

groupCursor.close();
db.close();

2.3 定义ExpandableListView适配器

我们需要定义一个继承自BaseExpandableListAdapter的适配器类,用于展示分组和子项数据。

public class MyExpandableListAdapter extends BaseExpandableListAdapter {

    private List<Group> groups;

    public MyExpandableListAdapter(List<Group> groups) {
        this.groups = groups;
    }

    @Override
    public int getGroupCount() {
        return groups.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return groups.get(groupPosition).getChildren().size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groups.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return groups.get(groupPosition).getChildren().get(childPosition);
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        // 返回分组视图的布局
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        // 返回子项视图的布局
    }

    // 其他方法省略
}

2.4 设置ExpandableListView适配器

最后,我们将适配器设置给ExpandableListView,并显示在界面上。

List<Group> groups = ...

MyExpandableListAdapter adapter = new MyExpandableListAdapter(groups);
ExpandableListView expandableListView = findViewById(R.id.expandableListView);
expandableListView.setAdapter(adapter);

总结

本文介绍了如何在Android应用中使用SQLite数据库和ExpandableListView。首先我们通过SQLiteOpenHelper类创建数据库,然后通过SQLiteDatabase执行各种数据库操作。接着我们使用ExpandableListView显示SQLite数据库数据,通过自定义适配器将数据库查询结果转换为分组和子项数据,并将其展示在界面上。

使用SQLite数据库和ExpandableListView可以方便地在Android应用中管理和显示大量数据,并提升用户体验。希望本文对你有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程