在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。在某些场景下,我们可能需要实现二级菜单,即在一级菜单的基础上展开显示二级菜单项,这通常涉及到数据的层级关系处理和UI的动态渲染。本篇将详细介绍如何利用SQLite数据库存储数据,并结合ListView来实现二级菜单的功能。 SQLite是Android系统内置的关系型数据库,用于本地存储结构化数据。创建SQLite数据库需要定义一个SQLiteOpenHelper子类,重写`onCreate()`和`onUpgrade()`方法。在`onCreate()`中创建表结构,例如: ```java public class DatabaseHelper extends SQLiteOpenHelper { // 数据库版本号 private static final int DATABASE_VERSION = 1; // 数据库名称 private static final String DATABASE_NAME = "MenuDB"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String CREATE_MENU_TABLE = "CREATE TABLE menu ( _id INTEGER PRIMARY KEY AUTOINCREMENT, " + "title TEXT)"; String CREATE_SUBMENU_TABLE = "CREATE TABLE submenu (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "parentId INTEGER, title TEXT)"; db.execSQL(CREATE_MENU_TABLE); db.execSQL(CREATE_SUBMENU_TABLE); } } ``` 这里我们创建了两个表,一个是`menu`用于存储一级菜单,另一个是`submenu`用于存储二级菜单,其中`parentId`字段关联一级菜单的_id。 接下来,我们需要填充数据。可以使用ContentProvider或者直接在SQLiteOpenHelper的子类中实现,这里简单演示如何在`onCreate()`中插入数据: ```java @Override public void onCreate(SQLiteDatabase db) { // ... 创建表代码 ... String[] menus = {"一级菜单1", "一级菜单2", "一级菜单3"}; String[] submenus = {"二级菜单1.1", "二级菜单1.2", "二级菜单2.1", "二级菜单3.1", "二级菜单3.2"}; for (int i = 0; i < menus.length; i++) { db.execSQL("INSERT INTO menu (title) VALUES ('" + menus[i] + "')"); for (int j = 0; j < submenus.length; j++) { if (j < 3) { db.execSQL("INSERT INTO submenu (parentId, title) VALUES (" + (i+1) + ", '" + submenus[j] + "')"); } else { db.execSQL("INSERT INTO submenu (parentId, title) VALUES (" + (i+1) + ", '" + submenus[j] + "')"); } } } } ``` 数据准备完成后,我们来处理UI。创建两个ListView,一个用于展示一级菜单,另一个用于显示对应的一级菜单下的二级菜单。一级菜单的ListView可以通过SimpleCursorAdapter绑定SQLite查询结果。二级菜单的ListView需要监听一级菜单的选择事件,动态更新数据源并刷新。 ```java // 主Activity public class MainActivity extends AppCompatActivity { private ListView mainMenuListView, subMenuListView; private DatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainMenuListView = findViewById(R.id.main_menu_list); subMenuListView = findViewById(R.id.sub_menu_list); dbHelper = new DatabaseHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.query("menu", null, null, null, null, null, null); SimpleCursorAdapter mainAdapter = new SimpleCursorAdapter( this, R.layout.menu_item, cursor, new String[]{"title"}, new int[]{R.id.menu_title}); mainMenuListView.setAdapter(mainAdapter); mainMenuListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Cursor submenuCursor = db.query("submenu", new String[]{"title"}, "parentId=?", new String[]{String.valueOf(position + 1)}, null, null, null); SimpleCursorAdapter subAdapter = new SimpleCursorAdapter( MainActivity.this, R.layout.submenu_item, submenuCursor, new String[]{"title"}, new int[]{R.id.submenu_title}); subMenuListView.setAdapter(subAdapter); } }); } } ``` 在布局文件中,你需要为每个ListView定义对应的item布局,例如`menu_item.xml`和`submenu_item.xml`,分别表示一级菜单和二级菜单的样式。 为了提高用户体验,可以在一级菜单的ListView中使用HeaderView来显示二级菜单的标题,同时二级菜单的ListView可以使用HeaderView来模拟嵌套效果。这样,用户就能看到清晰的层级关系。 以上就是如何使用SQLite数据库和双ListView实现二级菜单的完整流程。在这个过程中,我们学习了SQLite数据库的基本操作,如创建表、插入数据,以及如何使用ListView结合SQLite数据来构建动态的菜单系统。通过这种方式,你可以灵活地管理复杂的菜单结构,并在Android应用中提供丰富的交互体验。









































































































- 1

- 粉丝: 80
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 科技感互联网大数据PPT模板.pptx
- 大数据互联网PPT模板.pptx
- 计算机控制技术第三章-数字控制器的模拟化设计.ppt
- 第次课计算机辅助产品设计方法2022优秀文档.pptx
- 大数据公司知识产权战略规划.docx
- 服务器存储网络安全设备项目实施专业技术方案.docx
- 人工智能的利与弊观点.docx
- 数据库设计方案.doc
- 大一计算机基础知识试题及答案大一计算机基础知识训练题.doc
- 智慧城市项目管理系统建设设计方案.docx
- 数控机床与编程技术》电子教案.doc
- 网络安全知识竞赛-5.docx
- java高级工程师笔试题及答案.doc
- 信息化教学在现代教育教学中的作用.docx
- 会计电算系统数据接口设计思想与方法论文.doc
- 2020网站编辑工作总结.doc



- 1
- 2
- 3
- 4
- 5
- 6
前往页