From 011e9ade73468667ef86210b1ce0b5e636fa8665 Mon Sep 17 00:00:00 2001 From: thy <1648944807@qq.com> Date: Wed, 29 Nov 2023 15:41:03 +0800 Subject: [PATCH] 123 --- .../micode/notes/ui/NotesListActivity.java | 280 +++++++++--------- 1 file changed, 148 insertions(+), 132 deletions(-) diff --git a/小米便签源码/src/net/micode/notes/ui/NotesListActivity.java b/小米便签源码/src/net/micode/notes/ui/NotesListActivity.java index 1e6b10d..c67253d 100644 --- a/小米便签源码/src/net/micode/notes/ui/NotesListActivity.java +++ b/小米便签源码/src/net/micode/notes/ui/NotesListActivity.java @@ -67,7 +67,8 @@ import java.util.HashSet; * */ public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener { //没有用特定的标签加注释。。。感觉没有什么用 - private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0; + // 定义一些常量和枚举类型 + private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0; private static final int FOLDER_LIST_QUERY_TOKEN = 1; @@ -83,35 +84,35 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER }; - private ListEditState mState; - - private BackgroundQueryHandler mBackgroundQueryHandler; - - private NotesListAdapter mNotesListAdapter; - - private ListView mNotesListView; - - private Button mAddNewNote; - - private boolean mDispatch; - - private int mOriginY; - - private int mDispatchY; - - private TextView mTitleBar; - - private long mCurrentFolderId; - - private ContentResolver mContentResolver; - - private ModeCallback mModeCallBack; + private ListEditState mState; // 当前列表的编辑状态 + + private BackgroundQueryHandler mBackgroundQueryHandler; // 异步查询处理器 + + private NotesListAdapter mNotesListAdapter; // 笔记列表的适配器 + + private ListView mNotesListView; // 笔记列表视图 + + private Button mAddNewNote; // 添加新笔记的按钮 + + private boolean mDispatch; // 是否分发事件 + + private int mOriginY; // 原始Y坐标 + + private int mDispatchY; // 分发Y坐标 + + private TextView mTitleBar; // 标题栏 + + private long mCurrentFolderId; // 当前文件夹的ID + + private ContentResolver mContentResolver; // 内容解析器 + + private ModeCallback mModeCallBack; // 模式回调 private static final String TAG = "NotesListActivity"; public static final int NOTES_LISTVIEW_SCROLL_RATE = 30; - private NoteItemData mFocusNoteDataItem; + private NoteItemData mFocusNoteDataItem; // 当前焦点笔记的数据项 private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?"; @@ -137,7 +138,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt /** * Insert an introduction when user firstly use this application */ - setAppInfoFromRawRes(); + setAppInfoFromRawRes();// 初始化应用信息 } @Override @@ -156,14 +157,14 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt private void setAppInfoFromRawRes() { // Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); - if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) { + if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) {// 判断是否已添加介绍 StringBuilder sb = new StringBuilder(); InputStream in = null; try { // 把资源文件放到应用程序的/raw/raw下,那么就可以在应用中使用getResources获取资源后, // 以openRawResource方法(不带后缀的资源文件名)打开这个文件。 in = getResources().openRawResource(R.raw.introduction); - if (in != null) { + if (in != null) {// 读取原始资源文件中的介绍内容 InputStreamReader isr = new InputStreamReader(in); BufferedReader br = new BufferedReader(isr); char [] buf = new char[1024]; // 自行定义的数值,使用者不知道有什么意义 @@ -192,9 +193,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt // 创建空的WorkingNote WorkingNote note = WorkingNote.createEmptyNote(this, Notes.ID_ROOT_FOLDER, AppWidgetManager.INVALID_APPWIDGET_ID, Notes.TYPE_WIDGET_INVALIDE, - ResourceParser.RED); - note.setWorkingText(sb.toString()); - if (note.saveNote()) { + ResourceParser.RED); // 创建一个新的工作笔记 + note.setWorkingText(sb.toString()); // 设置工作笔记的内容为读取到的介绍内容 + if (note.saveNote()) { // 保存工作笔记 // 更新保存note的信息 sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit(); } else { @@ -213,11 +214,13 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt // 初始化资源 private void initResources() { mContentResolver = this.getContentResolver(); // 获取应用程序的数据,得到类似数据表的东西 + // 初始化BackgroundQueryHandler mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); mCurrentFolderId = Notes.ID_ROOT_FOLDER; // findViewById 是安卓编程的定位函数,主要是引用.R文件里的引用名 mNotesListView = (ListView) findViewById(R.id.notes_list); // 绑定XML中的ListView,作为Item的容器 + // 将尾部视图添加到列表视图 mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null), null, false); mNotesListView.setOnItemClickListener(new OnListItemClickListener()); @@ -240,7 +243,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt private DropdownMenu mDropDownMenu; private ActionMode mActionMode; private MenuItem mMoveMenu; - + // 创建ActionMode时触发 public boolean onCreateActionMode(ActionMode mode, Menu menu) { getMenuInflater().inflate(R.menu.note_list_options, menu); menu.findItem(R.id.delete).setOnMenuItemClickListener(this); @@ -256,7 +259,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt mNotesListAdapter.setChoiceMode(true); mNotesListView.setLongClickable(false); mAddNewNote.setVisibility(View.GONE); - + // 初始化下拉菜单 View customView = LayoutInflater.from(NotesListActivity.this).inflate( R.layout.note_list_dropdown_menu, null); mode.setCustomView(customView); @@ -266,7 +269,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ public boolean onMenuItemClick(final MenuItem item) { mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected()); - updateMenu(); + updateMenu();// 更新菜单 return true; } @@ -301,7 +304,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt // TODO Auto-generated method stub return false; } - + // 销毁ActionMode时触发 public void onDestroyActionMode(ActionMode mode) { mNotesListAdapter.setChoiceMode(false); mNotesListView.setLongClickable(true); @@ -311,13 +314,13 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt public void finishActionMode() { mActionMode.finish(); } - + // 当选择的项发生变化时触发 public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { mNotesListAdapter.setCheckedItem(position, checked); updateMenu(); } - + // 菜单项点击事件处理 public boolean onMenuItemClick(MenuItem item) { if (mNotesListAdapter.getSelectedCount() == 0) { Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none), @@ -327,6 +330,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt switch (item.getItemId()) { case R.id.delete: + // 弹出删除对话框 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(getString(R.string.alert_title_delete)); builder.setIcon(android.R.drawable.ic_dialog_alert); @@ -343,7 +347,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt builder.show(); break; case R.id.move: - startQueryDestinationFolders(); + startQueryDestinationFolders();// 查询目标文件夹 break; default: return false; @@ -415,14 +419,16 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }; private void startAsyncNotesListQuery() { + // 构建查询语句的selection,根据当前文件夹id选择不同的查询条件 String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION : NORMAL_SELECTION; + // 调用异步查询处理器进行数据库查询 mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null, Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[] { String.valueOf(mCurrentFolderId) }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); } - + // 异步查询处理器类 private final class BackgroundQueryHandler extends AsyncQueryHandler { public BackgroundQueryHandler(ContentResolver contentResolver) { super(contentResolver); @@ -432,10 +438,12 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt protected void onQueryComplete(int token, Object cookie, Cursor cursor) { switch (token) { case FOLDER_NOTE_LIST_QUERY_TOKEN: + // 查询完成后更新列表适配器的Cursor数据源 mNotesListAdapter.changeCursor(cursor); break; case FOLDER_LIST_QUERY_TOKEN: if (cursor != null && cursor.getCount() > 0) { + // 如果查询到了文件夹列表,则显示文件夹选择菜单 showFolderListMenu(cursor); } else { Log.e(TAG, "Query folder failed"); @@ -446,7 +454,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } } - + // 显示文件夹选择菜单 private void showFolderListMenu(Cursor cursor) { AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(R.string.menu_title_select_folder); @@ -454,6 +462,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt builder.setAdapter(adapter, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + // 点击菜单项后进行相应操作,这里是批量移动笔记到选中的文件夹 DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter.getSelectedItemIds(), adapter.getItemId(which)); Toast.makeText( @@ -467,19 +476,21 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }); builder.show(); } - + // 创建新的笔记 private void createNewNote() { Intent intent = new Intent(this, NoteEditActivity.class); intent.setAction(Intent.ACTION_INSERT_OR_EDIT); intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mCurrentFolderId); this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE); } - + // 批量删除操作 private void batchDelete() { new AsyncTask>() { protected HashSet doInBackground(Void... unused) { + // 获取选中笔记对应的小部件信息 HashSet widgets = mNotesListAdapter.getSelectedWidget(); if (!isSyncMode()) { + // 如果不是同步模式,则直接删除选中的笔记 // if not synced, delete notes directly if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter .getSelectedItemIds())) { @@ -538,7 +549,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } } - + // 打开笔记详情界面 private void openNode(NoteItemData data) { Intent intent = new Intent(this, NoteEditActivity.class); intent.setAction(Intent.ACTION_VIEW); @@ -547,6 +558,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } private void openFolder(NoteItemData data) { + // 更新当前文件夹id,并进行异步查询笔记列表 mCurrentFolderId = data.getId(); startAsyncNotesListQuery(); if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { @@ -566,85 +578,88 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt public void onClick(View v) { switch (v.getId()) { case R.id.btn_new_note: + // 点击新建笔记按钮,触发创建新的笔记操作 createNewNote(); break; default: break; } } - + // 显示输入法软键盘 private void showSoftInput() { InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (inputMethodManager != null) { inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); } } - + // 隐藏输入法软键盘 private void hideSoftInput(View view) { InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } - + //显示创建或修改文件夹的对话框 private void showCreateOrModifyFolderDialog(final boolean create) { - final AlertDialog.Builder builder = new AlertDialog.Builder(this); - View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null); - final EditText etName = (EditText) view.findViewById(R.id.et_foler_name); - showSoftInput(); - if (!create) { - if (mFocusNoteDataItem != null) { - etName.setText(mFocusNoteDataItem.getSnippet()); - builder.setTitle(getString(R.string.menu_folder_change_name)); + final AlertDialog.Builder builder = new AlertDialog.Builder(this);// 创建对话框构建器 + View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null);//加载布局文件 + final EditText etName = (EditText) view.findViewById(R.id.et_foler_name);// 获取输入框 + showSoftInput();// 显示软键盘 + if (!create) { // 如果是修改文件夹 + if (mFocusNoteDataItem != null) { // 如果有选中的文件夹 + etName.setText(mFocusNoteDataItem.getSnippet()); // 设置输入框文字为文件夹名称 + builder.setTitle(getString(R.string.menu_folder_change_name)); // 设置对话框标题为"更改文件夹名称" } else { - Log.e(TAG, "The long click data item is null"); + Log.e(TAG, "The long click data item is null"); // 输出错误日志 return; } - } else { - etName.setText(""); - builder.setTitle(this.getString(R.string.menu_create_folder)); + } else { // 如果是创建文件夹 + etName.setText(""); // 清空输入框 + builder.setTitle(this.getString(R.string.menu_create_folder)); // 设置对话框标题为"创建文件夹" } - builder.setPositiveButton(android.R.string.ok, null); + builder.setPositiveButton(android.R.string.ok, null); // 设置确定按钮,暂不处理点击事件 builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - hideSoftInput(etName); + hideSoftInput(etName); // 隐藏软键盘 } - }); - - final Dialog dialog = builder.setView(view).show(); - final Button positive = (Button)dialog.findViewById(android.R.id.button1); + }); // 设置取消按钮,点击时隐藏软键盘 + + final Dialog dialog = builder.setView(view).show(); // 创建对话框并显示 + final Button positive = (Button)dialog.findViewById(android.R.id.button1); // 获取确定按钮 positive.setOnClickListener(new OnClickListener() { public void onClick(View v) { - hideSoftInput(etName); - String name = etName.getText().toString(); - if (DataUtils.checkVisibleFolderName(mContentResolver, name)) { + hideSoftInput(etName); // 隐藏软键盘 + String name = etName.getText().toString(); // 获取输入的文件夹名称 + + if (DataUtils.checkVisibleFolderName(mContentResolver, name)) { // 检查文件夹名称是否可见 Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name), - Toast.LENGTH_LONG).show(); - etName.setSelection(0, etName.length()); + Toast.LENGTH_LONG).show(); // 显示提示信息,文件夹已存在 + etName.setSelection(0, etName.length()); // 选中输入框中的文字 return; } - if (!create) { - if (!TextUtils.isEmpty(name)) { + + if (!create) { // 如果是修改文件夹 + if (!TextUtils.isEmpty(name)) { // 如果文件夹名称不为空 ContentValues values = new ContentValues(); - values.put(NoteColumns.SNIPPET, name); - values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); - values.put(NoteColumns.LOCAL_MODIFIED, 1); + values.put(NoteColumns.SNIPPET, name); // 更新文件夹名称 + values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); // 设置类型为文件夹 + values.put(NoteColumns.LOCAL_MODIFIED, 1); // 标记本地修改 mContentResolver.update(Notes.CONTENT_NOTE_URI, values, NoteColumns.ID + "=?", new String[] { String.valueOf(mFocusNoteDataItem.getId()) - }); + }); // 更新数据库中的文件夹信息 } - } else if (!TextUtils.isEmpty(name)) { + } else if (!TextUtils.isEmpty(name)) { // 如果是创建文件夹且文件夹名称不为空 ContentValues values = new ContentValues(); - values.put(NoteColumns.SNIPPET, name); - values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); - mContentResolver.insert(Notes.CONTENT_NOTE_URI, values); + values.put(NoteColumns.SNIPPET, name); // 设置文件夹名称 + values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); // 设置类型为文件夹 + mContentResolver.insert(Notes.CONTENT_NOTE_URI, values); // 插入数据库中 } - dialog.dismiss(); + + dialog.dismiss(); // 关闭对话框 } }); - - if (TextUtils.isEmpty(etName.getText())) { - positive.setEnabled(false); + if (TextUtils.isEmpty(etName.getText())) { // 如果输入框内容为空 + positive.setEnabled(false); // 禁用确定按钮 } /** * When the name edit text is null, disable the positive button @@ -784,54 +799,55 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); - if (mState == ListEditState.NOTE_LIST) { - getMenuInflater().inflate(R.menu.note_list, menu); - // set sync or sync_cancel + if (mState == ListEditState.NOTE_LIST) { // 如果当前状态是便签列表 + getMenuInflater().inflate(R.menu.note_list, menu); // 加载便签列表的菜单布局 + // 设置同步或取消同步选项的标题 menu.findItem(R.id.menu_sync).setTitle( GTaskSyncService.isSyncing() ? R.string.menu_sync_cancel : R.string.menu_sync); - } else if (mState == ListEditState.SUB_FOLDER) { - getMenuInflater().inflate(R.menu.sub_folder, menu); - } else if (mState == ListEditState.CALL_RECORD_FOLDER) { - getMenuInflater().inflate(R.menu.call_record_folder, menu); + } else if (mState == ListEditState.SUB_FOLDER) { // 如果当前状态是子文件夹 + getMenuInflater().inflate(R.menu.sub_folder, menu); // 加载子文件夹的菜单布局 + } else if (mState == ListEditState.CALL_RECORD_FOLDER) { // 如果当前状态是通话记录文件夹 + getMenuInflater().inflate(R.menu.call_record_folder, menu); // 加载通话记录文件夹的菜单布局 } else { - Log.e(TAG, "Wrong state:" + mState); + Log.e(TAG, "Wrong state:" + mState); // 如果状态不匹配,则输出错误日志 } return true; } + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.menu_new_folder: { - showCreateOrModifyFolderDialog(true); + case R.id.menu_new_folder: { // 如果选择了新建文件夹选项 + showCreateOrModifyFolderDialog(true); // 显示创建或修改文件夹对话框 break; } - case R.id.menu_export_text: { - exportNoteToText(); + case R.id.menu_export_text: { // 如果选择了导出文本选项 + exportNoteToText(); // 导出便签到文本 break; } - case R.id.menu_sync: { - if (isSyncMode()) { + case R.id.menu_sync: { // 如果选择了同步选项 + if (isSyncMode()) { // 如果处于同步模式 if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) { - GTaskSyncService.startSync(this); + GTaskSyncService.startSync(this); // 启动同步服务 } else { - GTaskSyncService.cancelSync(this); + GTaskSyncService.cancelSync(this); // 取消同步服务 } } else { - startPreferenceActivity(); + startPreferenceActivity(); // 跳转到设置界面 } break; } - case R.id.menu_setting: { - startPreferenceActivity(); + case R.id.menu_setting: { // 如果选择了设置选项 + startPreferenceActivity(); // 跳转到设置界面 break; } - case R.id.menu_new_note: { - createNewNote(); + case R.id.menu_new_note: { // 如果选择了新建便签选项 + createNewNote(); // 创建新的便签 break; } case R.id.menu_search: - onSearchRequested(); + onSearchRequested(); // 执行搜索操作 break; default: break; @@ -856,41 +872,41 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this); new AsyncTask() { - @Override + @Override protected Integer doInBackground(Void... unused) { - return backup.exportToText(); + return backup.exportToText(); // 调用备份工具类的导出便签到文本方法 } - + @Override protected void onPostExecute(Integer result) { - if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) { + if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) { // 如果SD卡未挂载 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(NotesListActivity.this - .getString(R.string.failed_sdcard_export)); + .getString(R.string.failed_sdcard_export)); // 设置对话框标题为导出失败 builder.setMessage(NotesListActivity.this - .getString(R.string.error_sdcard_unmounted)); + .getString(R.string.error_sdcard_unmounted)); // 设置对话框内容为SD卡未挂载 builder.setPositiveButton(android.R.string.ok, null); builder.show(); - } else if (result == BackupUtils.STATE_SUCCESS) { + } else if (result == BackupUtils.STATE_SUCCESS) { // 如果导出成功 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(NotesListActivity.this - .getString(R.string.success_sdcard_export)); + .getString(R.string.success_sdcard_export)); // 设置对话框标题为导出成功 builder.setMessage(NotesListActivity.this.getString( R.string.format_exported_file_location, backup - .getExportedTextFileName(), backup.getExportedTextFileDir())); + .getExportedTextFileName(), backup.getExportedTextFileDir())); // 设置对话框内容为导出文件的位置 builder.setPositiveButton(android.R.string.ok, null); builder.show(); - } else if (result == BackupUtils.STATE_SYSTEM_ERROR) { + } else if (result == BackupUtils.STATE_SYSTEM_ERROR) { // 如果系统错误 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(NotesListActivity.this - .getString(R.string.failed_sdcard_export)); + .getString(R.string.failed_sdcard_export)); // 设置对话框标题为导出失败 builder.setMessage(NotesListActivity.this - .getString(R.string.error_sdcard_export)); + .getString(R.string.error_sdcard_export)); // 设置对话框内容为导出错误 builder.setPositiveButton(android.R.string.ok, null); builder.show(); } } - + }.execute(); } @@ -916,26 +932,26 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt * 函数功能:实现对便签列表项的点击事件(短按) */ private class OnListItemClickListener implements OnItemClickListener { - + public void onItemClick(AdapterView parent, View view, int position, long id) { if (view instanceof NotesListItem) { - NoteItemData item = ((NotesListItem) view).getItemData(); - if (mNotesListAdapter.isInChoiceMode()) { + NoteItemData item = ((NotesListItem) view).getItemData(); // 获取点击项的数据 + if (mNotesListAdapter.isInChoiceMode()) { // 如果处于选择模式 if (item.getType() == Notes.TYPE_NOTE) { position = position - mNotesListView.getHeaderViewsCount(); mModeCallBack.onItemCheckedStateChanged(null, position, id, - !mNotesListAdapter.isSelectedItem(position)); + !mNotesListAdapter.isSelectedItem(position)); // 更新选择状态 } return; } - + switch (mState) { case NOTE_LIST: if (item.getType() == Notes.TYPE_FOLDER || item.getType() == Notes.TYPE_SYSTEM) { - openFolder(item); + openFolder(item); // 打开文件夹 } else if (item.getType() == Notes.TYPE_NOTE) { - openNode(item); + openNode(item); // 打开便签 } else { Log.e(TAG, "Wrong note type in NOTE_LIST"); } @@ -943,7 +959,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt case SUB_FOLDER: case CALL_RECORD_FOLDER: if (item.getType() == Notes.TYPE_NOTE) { - openNode(item); + openNode(item); // 打开便签 } else { Log.e(TAG, "Wrong note type in SUB_FOLDER"); } @@ -953,9 +969,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } } - + } - + /** * 查询目标文件 */ @@ -963,7 +979,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt 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, null, Notes.CONTENT_NOTE_URI, @@ -985,16 +1001,16 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt */ public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { if (view instanceof NotesListItem) { - mFocusNoteDataItem = ((NotesListItem) view).getItemData(); + mFocusNoteDataItem = ((NotesListItem) view).getItemData();// 获取当前长按项的数据 if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) { if (mNotesListView.startActionMode(mModeCallBack) != null) { - mModeCallBack.onItemCheckedStateChanged(null, position, id, true); + mModeCallBack.onItemCheckedStateChanged(null, position, id, true);// 更改选择状态 mNotesListView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); } else { Log.e(TAG, "startActionMode fails"); } } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) { - mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener); + mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener);// 设置创建上下文菜单监听器 } } return false;