SQLite 在 Android ExpandableListView 和 SQLite 数据库

SQLite 在 Android ExpandableListView 和 SQLite 数据库

在本文中,我们将介绍如何在 Android ExpandableListView 中使用 SQLite 数据库。SQLite 是一种轻量级的嵌入式数据库,被广泛应用于各种移动应用开发中。ExpandableListView 是 Android 中的一个可展开的列表视图,可以在一个列表项内展开子项。结合使用这两种技术,我们可以实现一个具有层级结构的可扩展的列表视图,并将数据存储在 SQLite 数据库中。

阅读更多:SQLite 教程

创建 SQLite 数据库

首先,我们需要创建一个 SQLite 数据库来存储 ExpandableListView 中的数据。在 Android 中,我们可以使用 SQLiteOpenHelper 类来创建和管理数据库。SQLiteOpenHelper 是一个抽象类,我们需要继承它并实现一些方法来创建和升级数据库。

以下是一个示例代码,演示了如何创建一个名为 “MyDatabase” 的数据库,并创建一个 “groups” 表和一个 “items” 表来存储 ExpandableListView 的数据。

public class MyDatabaseHelper extends SQLiteOpenHelper {

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

    private static final String CREATE_GROUPS_TABLE = "CREATE TABLE groups ("
            + "id INTEGER PRIMARY KEY AUTOINCREMENT,"
            + "name TEXT)";

    private static final String CREATE_ITEMS_TABLE = "CREATE TABLE items ("
            + "id INTEGER PRIMARY KEY AUTOINCREMENT,"
            + "group_id INTEGER,"
            + "name TEXT)";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_GROUPS_TABLE);
        db.execSQL(CREATE_ITEMS_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 升级数据库时的操作,此处省略
    }
}

在上面的代码中,我们定义了一个 MyDatabaseHelper 类继承自 SQLiteOpenHelper,并在 onCreate 方法中执行了创建数据库表的操作。这样,我们就创建好了一个用于存储 ExpandableListView 数据的 SQLite 数据库。

CRUD 操作

接下来,让我们看一下如何执行常见的增删改查操作(CRUD)。

插入数据

要想向数据库中插入新的数据,我们需要使用 SQLiteDatabase 的 insert() 方法。以下是一个示例代码,演示了如何插入新的分组和子项数据。

public class MyDatabaseHelper extends SQLiteOpenHelper {

    // ...

    public long insertGroup(String name) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", name);
        return db.insert("groups", null, values);
    }

    public long insertItem(int groupId, String name) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("group_id", groupId);
        values.put("name", name);
        return db.insert("items", null, values);
    }
}

在上面的代码中,我们分别在 insertGroup() 和 insertItem() 方法中执行了插入分组和子项数据的操作。首先,我们获取一个可写的 SQLiteDatabase 对象,然后创建一个 ContentValues 对象并将要插入的数据放入其中,最后调用 insert() 方法将数据插入到相应的表中。

查询数据

要查询数据库中的数据,我们可以使用 SQLiteDatabase 的 query() 方法。以下是一个示例代码,演示了如何查询所有的分组和子项数据。

public class MyDatabaseHelper extends SQLiteOpenHelper {

    // ...

    public Cursor getAllGroups() {
        SQLiteDatabase db = getReadableDatabase();
        return db.query("groups", null, null, null, null, null, null);
    }

    public Cursor getItemsByGroupId(int groupId) {
        SQLiteDatabase db = getReadableDatabase();
        String[] columns = {"id", "name"};
        String selection = "group_id = ?";
        String[] selectionArgs = {String.valueOf(groupId)};
        return db.query("items", columns, selection, selectionArgs, null, null, null);
    }
}

在上面的代码中,我们分别在 getAllGroups() 和 getItemsByGroupId() 方法中执行了查询所有分组和根据分组 ID 查询子项的操作。首先,我们获取一个可读的 SQLiteDatabase 对象,然后调用 query() 方法执行查询操作。query() 方法接受多个参数,包括表名、要查询的列、查询条件等,通过设置这些参数我们可以灵活地进行查询。

更新和删除数据

要更新或删除数据库中的数据,我们可以使用 SQLiteDatabase 的 update() 和 delete() 方法。

以下是一个示例代码,演示了如何更新分组和子项数据的操作。

public class MyDatabaseHelper extends SQLiteOpenHelper {

    // ...

    public int updateGroup(int groupId, String newName) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", newName);
        String whereClause = "id = ?";
        String[] whereArgs = {String.valueOf(groupId)};
        return db.update("groups", values, whereClause, whereArgs);
    }

    public int deleteItem(int itemId) {
        SQLiteDatabase db = getWritableDatabase();
        String whereClause = "id = ?";
        String[] whereArgs = {String.valueOf(itemId)};
        return db.delete("items", whereClause, whereArgs);
    }
}

在上面的代码中,我们分别在 updateGroup() 和 deleteItem() 方法中执行了更新分组和删除子项数据的操作。首先,我们获取一个可写的 SQLiteDatabase 对象,然后创建一个 ContentValues 对象并设置新的值,最后调用 update() 或 delete() 方法执行更新或删除操作。

在 ExpandableListView 中显示数据

现在,我们已经学会了如何使用 SQLite 数据库执行各种操作。接下来,让我们看一下如何在 ExpandableListView 中显示数据库中的数据。

首先,我们需要在布局文件中定义一个 ExpandableListView。

<ExpandableListView
    android:id="@+id/expandableListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

接下来,在 Activity 或 Fragment 中获取 ExpandableListView 对象,并设置相应的适配器。

public class MainActivity extends AppCompatActivity {

    private MyDatabaseHelper dbHelper;
    private ExpandableListView expandableListView;

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

        dbHelper = new MyDatabaseHelper(this);
        expandableListView = findViewById(R.id.expandableListView);

        // 获取分组和子项数据
        Cursor groupCursor = dbHelper.getAllGroups();
        Cursor childCursor = dbHelper.getItemsByGroupId(groupId); // 根据需求传入正确的 group ID

        // 创建适配器并设置给 ExpandableListView
        ExpandableListAdapter adapter = new MyExpandableListAdapter(groupCursor, childCursor);
        expandableListView.setAdapter(adapter);
    }

    // ...
}

在上面的代码中,我们首先获取一个 MyDatabaseHelper 对象,并在 onCreate 方法中获取 ExpandableListView 对象。然后,我们调用 getAllGroups() 和 getItemsByGroupId() 方法获取数据,并创建一个自定义的适配器 MyExpandableListAdapter,并将其设置给 ExpandableListView。

最后,我们需要实现一个自定义的适配器 MyExpandableListAdapter 来提供数据给 ExpandableListView。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程