From 11b7687aeaa9eab4aad929d0d91206ca0831dcd5 Mon Sep 17 00:00:00 2001 From: yfyl1005 <2812723117@qq.com> Date: Wed, 19 Apr 2023 13:25:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9E=97=E4=BA=AD=E6=97=AD=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A0=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NotesListActivity.java | 48 +++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/doc/标注/210340061_林亭旭/NotesListActivity.java b/doc/标注/210340061_林亭旭/NotesListActivity.java index 81eda6e..1d876bf 100644 --- a/doc/标注/210340061_林亭旭/NotesListActivity.java +++ b/doc/标注/210340061_林亭旭/NotesListActivity.java @@ -758,7 +758,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt /* (non-Javadoc) * @see android.app.Activity#onContextItemSelected(android.view.MenuItem) - * 针对menu中不同的选择进行不同的处理,里面详细注释 + * 针对menu中不同的选择进行不同的处理 */ @Override public boolean onContextItemSelected(MenuItem item) { @@ -972,21 +972,27 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt /** * 查询目标文件 */ - private void startQueryDestinationFolders() { + private void startQueryDestinationFolders() + //于查询目标文件夹列表 + { String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?"; selection = (mState == ListEditState.NOTE_LIST) ? selection: "(" + selection + ") OR (" + NoteColumns.ID + "=" + Notes.ID_ROOT_FOLDER + ")"; - - mBackgroundQueryHandler.startQuery(FOLDER_LIST_QUERY_TOKEN, +//首先根据当前 Notebook 的状态(是笔记列表还是文件夹列表),初始化查询条件 selection。 +// 当 mState 为 ListEditState.NOTE_LIST 时,查询条件为 NoteColumns.TYPE=? AND NoteColumns.PARENT_ID<>? AND NoteColumns.ID<>?; +// 否则在查询笔记时还需要查询根文件夹,查询条件变为 (NoteColumns.TYPE=? AND NoteColumns.PARENT_ID<>? AND NoteColumns.ID<>?) OR (NoteColumns.ID=?)。 + mBackgroundQueryHandler.startQuery(FOLDER_LIST_QUERY_TOKEN,//标识该次查询任务 + //调用 mBackgroundQueryHandler 的 startQuery() 方法执行异步查询 + //传入查询结果的 token null, - Notes.CONTENT_NOTE_URI, - FoldersListAdapter.PROJECTION, - selection, + Notes.CONTENT_NOTE_URI,//查询 URI + FoldersListAdapter.PROJECTION,//查询需要的列名数组 + selection,// selection 中占位符的实际值 new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER), String.valueOf(mCurrentFolderId) - }, + },//排序方式,按修改日期倒序排列 NoteColumns.MODIFIED_DATE + " DESC"); } @@ -996,20 +1002,32 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt * 如果长按的是便签,则通过ActionMode菜单实现;如果长按的是文件夹,则通过ContextMenu菜单实现; * 具体ActionMOde菜单和ContextMenu菜单的详细见精度笔记 */ - public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { - if (view instanceof NotesListItem) { + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) + //列表项的长按事件处理代码 + { + if (view instanceof NotesListItem) + //判断该列表项是否属于 NotesListItem 类型 + { mFocusNoteDataItem = ((NotesListItem) view).getItemData(); - if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) { - if (mNotesListView.startActionMode(mModeCallBack) != null) { + //将该列表项所对应的笔记数据项(NoteDataItem)赋值给 mFocusNoteDataItem 变量 + if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) + //判断当前选中的笔记类型是否为 TYPE_NOTE,并且当前未处于多选模式 + { + if (mNotesListView.startActionMode(mModeCallBack) != null) + //调用 startActionMode() 方法启动多选模式,并通过回调方法 mModeCallBack.onItemCheckedStateChanged() 将该笔记的选择状态设置为已选择 + { mModeCallBack.onItemCheckedStateChanged(null, position, id, true); + //调用 performHapticFeedback() 方法发出震动反馈以提醒用户确认已进入多选模式 mNotesListView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); } else { - Log.e(TAG, "startActionMode fails"); + Log.e(TAG, "startActionMode fails");//如果启动多选模式失败,则打印错误日志 } - } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) { + } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) + //如果当前选中的笔记类型为 TYPE_FOLDER,则会注册一个 onCreateContextMenuListener,用于创建上下文菜单 + { mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener); } } - return false; + return false;//返回 false 表示事件未被消耗,允许程序继续响应该事件的其他监听器 } }