|
|
|
@ -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 表示事件未被消耗,允许程序继续响应该事件的其他监听器
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|