# Android_NotePad **Repository Path**: chzb034/android_-note-pad ## Basic Information - **Project Name**: Android_NotePad - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-01 - **Last Updated**: 2025-12-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NotePad-Android应用介绍文档 ## 一.初始应用的功能 ### 1.新建笔记和编辑笔记 (1)在主界面点击红色矩形所示按钮,新建笔记并进入编辑界面 ![初始应用功能1.1](./运行结果截图/初始应用功能1.1.png) (2)进入笔记编辑界面后,可进行笔记编辑 ![初始应用功能1.2](./运行结果截图/初始应用功能1.2.png) ### 2.笔记列表 在进行笔记的新建和编辑后,在主界面中呈现笔记列表。在初始应用中背景颜色为黑色,字体颜色为白色,且笔记列表中的每个条目都只显示笔记标题 ![初始应用功能3](./运行结果截图/初始应用功能3.png) ## 二.拓展基本功能 ### (一).标签筛选功能 #### 1.功能要求 支持按分类标签筛选笔记,用户可以选择特定分类,只显示该分类下的笔记 #### 2.实现思路和技术实现 (1)在主页面菜单中添加分类筛选选项 ```xml ``` (2)实现分类筛选菜单,显示所有可用分类 ```java /** * 显示分类筛选菜单 */ private void showCategoryFilterMenu() { try { // 创建菜单 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("按分类筛选"); // 创建分类列表,包含全部笔记、默认分类、预定义常用分类和数据库分类 List categoryNamesList = new ArrayList<>(); List categoryIdsList = new ArrayList<>(); // 添加全部笔记选项,使用特殊值表示不筛选 categoryNamesList.add("全部笔记"); categoryIdsList.add(-999L); // 使用-999而不是-1,避免与工作分类冲突 // 添加默认分类选项 categoryNamesList.add("默认"); categoryIdsList.add(1L); // 添加预定义的常用分类 categoryNamesList.add("工作"); categoryIdsList.add(-1L); // 工作分类 categoryNamesList.add("学习"); categoryIdsList.add(-2L); categoryNamesList.add("生活"); categoryIdsList.add(-3L); categoryNamesList.add("笔记"); categoryIdsList.add(-4L); categoryNamesList.add("购物"); categoryIdsList.add(-5L); // 查询数据库中的自定义分类 Cursor categoryCursor = null; try { // 确保NotePad.Categories.CONTENT_URI有效 if (NotePad.Categories.CONTENT_URI != null) { categoryCursor = getContentResolver().query( NotePad.Categories.CONTENT_URI, new String[] { NotePad.Categories._ID, NotePad.Categories.COLUMN_NAME_NAME }, null, null, null); if (categoryCursor != null && categoryCursor.moveToFirst()) { do { long categoryId = categoryCursor.getLong(categoryCursor.getColumnIndex(NotePad.Categories._ID)); String categoryName = categoryCursor.getString(categoryCursor.getColumnIndex(NotePad.Categories.COLUMN_NAME_NAME)); // 只添加有效的分类 if (categoryName != null && !categoryName.isEmpty()) { categoryNamesList.add(categoryName); categoryIdsList.add(categoryId); } } while (categoryCursor.moveToNext()); } } } catch (Exception e) { Log.e(TAG, "Error querying categories: " + e.getMessage()); } finally { if (categoryCursor != null) { categoryCursor.close(); } } // 转换为数组 final String[] categories = categoryNamesList.toArray(new String[0]); final long[] categoryIds = new long[categoryIdsList.size()]; for (int i = 0; i < categoryIdsList.size(); i++) { categoryIds[i] = categoryIdsList.get(i); } // 设置默认选中项 int checkedItem = 0; for (int i = 0; i < categoryIds.length; i++) { if (categoryIds[i] == mSelectedFilterCategoryId) { checkedItem = i; break; } } // 显示单选列表 builder.setSingleChoiceItems(categories, checkedItem, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mSelectedFilterCategoryId = categoryIds[which]; dialog.dismiss(); loadNotes(); // 重新加载笔记 } }); // 添加取消按钮 builder.setNegativeButton("取消", null); builder.show(); } catch (Exception e) { Log.e(TAG, "Error showing category filter menu: " + e.getMessage()); } } ``` (3)在loadNotes方法中添加分类筛选逻辑 ```java // 如果有分类筛选,则添加分类条件 // -999表示不筛选(全部笔记),-1到-5是预定义分类,0及以上是自定义分类 if (mSelectedFilterCategoryId != -999) { // 只有不等于-999时才应用筛选 if (selection != null) { selection += " AND "; } else { selection = ""; } if (mSelectedFilterCategoryId == 1) { // 1表示默认分类 // 筛选默认分类的笔记(数据库中默认分类ID为1) selection += NotePad.Notes.COLUMN_NAME_CATEGORY_ID + " = 1"; } else { // 筛选特定分类的笔记 // 对于预定义分类(-1到-5),需要特殊处理,因为它们不是真正的数据库分类ID if (mSelectedFilterCategoryId < 0 && mSelectedFilterCategoryId > -6) { // -1到-5是预定义分类 // 预定义分类需要特殊处理,这里添加日志便于调试 Log.d(TAG, "Filtering by predefined category: " + mSelectedFilterCategoryId); } // 统一使用相同的查询逻辑 selection += NotePad.Notes.COLUMN_NAME_CATEGORY_ID + " = ?"; if (selectionArgs != null) { // 合并参数 String[] newSelectionArgs = new String[selectionArgs.length + 1]; System.arraycopy(selectionArgs, 0, newSelectionArgs, 0, selectionArgs.length); newSelectionArgs[selectionArgs.length] = String.valueOf(mSelectedFilterCategoryId); selectionArgs = newSelectionArgs; } else { selectionArgs = new String[] { String.valueOf(mSelectedFilterCategoryId) }; } } } ``` (4)在onOptionsItemSelected方法中添加分类筛选菜单的处理 ```java // 处理分类筛选菜单 if (id == MENU_CATEGORY_FILTER) { // 显示分类筛选菜单 showCategoryFilterMenu(); return true; } ``` #### 3.实现效果界面截图 (1)主页面菜单中现在有"按分类筛选"选项 ![拓展基本功能6.1](./运行结果截图/拓展基本功能6.1.png) (2)点击"按分类筛选"后,显示分类选择对话框 ![拓展基本功能6.2](./运行结果截图/拓展基本功能6.2.png) (3)选择特定分类后,只显示该分类下的笔记 ![拓展基本功能6.3](./运行结果截图/拓展基本功能6.3.png) ### (二).搜索功能 #### 1.功能要求 支持按标题和内容搜索笔记,实时根据输入内容过滤笔记列表 #### 2.实现思路和技术实现 (1)在主页面布局中添加搜索框和搜索按钮 ```xml