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。
极客教程