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应用中管理和显示大量数据,并提升用户体验。希望本文对你有所帮助。