diff --git a/src/main/java/net/micode/notes/ui/NoteItemData.java b/src/main/java/net/micode/notes/ui/NoteItemData.java index d15ca95..e0816bf 100644 --- a/src/main/java/net/micode/notes/ui/NoteItemData.java +++ b/src/main/java/net/micode/notes/ui/NoteItemData.java @@ -29,18 +29,27 @@ import net.micode.notes.tool.DataUtils; public class NoteItemData { static final String [] PROJECTION = new String [] { + //一开始,类NoteItemData定义了大量的私有数据成员.它们遵循以下的命名规则: + //后面带_COLUMN的变量是为了方便cursor确定以后寻找对应列的数据 NoteColumns.ID, + //每个note都有独一无二的id NoteColumns.ALERTED_DATE, + //设置的警报提醒时间 NoteColumns.BG_COLOR_ID, - NoteColumns.CREATED_DATE, + //背景颜色 + NoteColumns.CREATED_DATE,//创建的时间 NoteColumns.HAS_ATTACHMENT, + //是否有附件。如果是一个text note,它不会有附件,如果是一个多媒体附件,会有至少一个附件 NoteColumns.MODIFIED_DATE, NoteColumns.NOTES_COUNT, + //便签数量 NoteColumns.PARENT_ID, NoteColumns.SNIPPET, NoteColumns.TYPE, NoteColumns.WIDGET_ID, + // 小挂件的序号 NoteColumns.WIDGET_TYPE, + //小挂件的类型 }; //常量标记和数据就不一一标记了,意义翻译基本就知道 private static final int ID_COLUMN = 0; @@ -72,13 +81,20 @@ public class NoteItemData { private String mPhoneNumber; private boolean mIsLastItem; + //判断是否为最后的项 private boolean mIsFirstItem; + //判断是否为最开始的项 private boolean mIsOnlyOneItem; + // 判断是否只有一个便签,或者一个文件夹 private boolean mIsOneNoteFollowingFolder; private boolean mIsMultiNotesFollowingFolder; //初始化NoteItemData,主要利用光标cursor获取的东西 public NoteItemData(Context context, Cursor cursor) { //getxxx为转换格式 + //第一个函数是类NoteItemData的构造函数,它完成了以下工作. + //对于这个类的所有私有m型变量,通过cursor调用json中相应数据进行初始化 + //对mPhoneNumber和mName进行单独处理 + //检查cursor的位置 mId = cursor.getLong(ID_COLUMN); mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN); mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN); @@ -97,8 +113,10 @@ public class NoteItemData { //初始化电话号码的信息 mPhoneNumber = ""; if (mParentId == Notes.ID_CALL_RECORD_FOLDER) { + //初始化电话号码信息 mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId); - if (!TextUtils.isEmpty(mPhoneNumber)) {//mphonenumber里有符合字符串,则用contart功能连接 + if (!TextUtils.isEmpty(mPhoneNumber)) { + //mphonenumber里有符合字符串,则用contart功能连接 mName = Contact.getContact(context, mPhoneNumber); if (mName == null) { mName = mPhoneNumber; @@ -122,15 +140,20 @@ public class NoteItemData { mIsOneNoteFollowingFolder = false; //主要是设置上诉2标记 - if (mType == Notes.TYPE_NOTE && !mIsFirstItem) {//若是note格式并且不是第一个元素 + if (mType == Notes.TYPE_NOTE && !mIsFirstItem) { + //若是note格式并且不是第一个元素 int position = cursor.getPosition(); - if (cursor.moveToPrevious()) {//获取光标位置后看上一行 + if (cursor.moveToPrevious()) { + //获取光标位置后看上一行 if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER - || cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) {//若光标满足系统或note格式 + || cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) { + //若光标满足系统或note格式 if (cursor.getCount() > (position + 1)) { - mIsMultiNotesFollowingFolder = true;//若是数据行数大于但前位置+1则设置成正确 + mIsMultiNotesFollowingFolder = true; + //若是数据行数大于但前位置+1则设置成正确 } else { - mIsOneNoteFollowingFolder = true;//否则单一文件夹标记为true + mIsOneNoteFollowingFolder = true; + //否则单一文件夹标记为true } } if (!cursor.moveToNext()) {//若不能再往下走则报错 @@ -140,82 +163,85 @@ public class NoteItemData { } } ///以下都是获取标记没什么好说的,不过倒数第二个需要说明下,很具体看下面 +//下面所有一系列的函数都具有相似的结构, +//它们的作用是进行传值或条件判断,得益于小米便签优良的代码风格,我们光从名字就可以大概了解这个函数的具体意义 public boolean isOneFollowingFolder() { return mIsOneNoteFollowingFolder; } - + //若数据父id为保存至文件夹模式的id且满足电话号码单元不为空,则isCallRecord为true public boolean isMultiFollowingFolder() { return mIsMultiNotesFollowingFolder; } - + //判断是否是最后一个项 public boolean isLast() { return mIsLastItem; } - + //获得便签的姓名 public String getCallName() { return mName; } - + //判断是否是第一个项 public boolean isFirst() { return mIsFirstItem; } - + //判断是否只有一个项 public boolean isSingle() { return mIsOnlyOneItem; } - + //获得对应的ID值 public long getId() { return mId; } - + //获得对应的提醒时间 public long getAlertDate() { return mAlertDate; } - + //获得创建的时间 public long getCreatedDate() { return mCreatedDate; } - + //判断是否关联桌面挂件 public boolean hasAttachment() { return mHasAttachment; } - + //获得修改的时间 public long getModifiedDate() { return mModifiedDate; } - + //获得背景颜色的索引 public int getBgColorId() { return mBgColorId; } - + //获得父进程的id public long getParentId() { return mParentId; } - + //获得便签数量 public int getNotesCount() { return mNotesCount; } - + //获得文件夹id public long getFolderId () { return mParentId; } - + //获得桌面挂件的类型 + //获得项的类型 public int getType() { return mType; } - + //获得获得桌面挂件id public int getWidgetType() { return mWidgetType; } - + //获得获得桌面挂件id public int getWidgetId() { return mWidgetId; } - + //获得文件夹名称 public String getSnippet() { return mSnippet; } - + //判读此便签是否有提醒 public boolean hasAlert() { return (mAlertDate > 0); } @@ -224,7 +250,7 @@ public class NoteItemData { public boolean isCallRecord() { return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber)); } - + //获得便签的类型 public static int getNoteType(Cursor cursor) { return cursor.getInt(TYPE_COLUMN); }