小米便签源代码

master
黎萍 2 years ago
parent 97316f5dec
commit dd6135de2f

@ -81,21 +81,19 @@ import java.io.InputStreamReader;
import java.util.HashSet;
public class NotesListActivity extends AppCompatActivity implements OnClickListener, OnItemLongClickListener {
//folder_note_list_query_token folder_list_query_token
private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
private static final int FOLDER_LIST_QUERY_TOKEN = 1;
//menu_folder_delete menu_folder_view menu_folder_change_name
private static final int MENU_FOLDER_DELETE = 0;
private static final int MENU_FOLDER_VIEW = 1;
private static final int MENU_FOLDER_CHANGE_NAME = 2;
//preference_add_introduction,单行超过80个字符
private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction";
private enum ListEditState {
NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
};
};//note_list sub_folder call_record_folder
private ListEditState mState;
@ -134,15 +132,21 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
+ NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND "
+ NoteColumns.NOTES_COUNT + ">0)";
//request_code_open_node request_code_new_node
private final static int REQUEST_CODE_OPEN_NODE = 102;
private final static int REQUEST_CODE_NEW_NODE = 103;
@Override
//onCreate()的Bundle需要是final类型
/*Javafinal
finalfinalfinal
final
final
final*/
protected void onCreate(Bundle savedInstanceState) {
//调用父类的onCreate()函数,加载首页布局文件,初始化资源
super.onCreate(savedInstanceState);
setContentView(R.layout.note_list);
initResources();
/**
* Insert an introduction when user firstly use this application
*/
@ -150,26 +154,36 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
@Override
//返回一些子模块完成的数据交给主Activity处理
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//返回的结果值 和 要求值 相等
if (resultCode == RESULT_OK
&& (requestCode == REQUEST_CODE_OPEN_NODE || requestCode == REQUEST_CODE_NEW_NODE)) {
mNotesListAdapter.changeCursor(null);
} else {
//调用Activity的onActivityResult()
super.onActivityResult(requestCode, resultCode, data);
}
}
//首次打开加载默认便签
private void setAppInfoFromRawRes() {
//Android平台提供了一个SharedPreferences类这是一个轻量级的存储类特别适合用于保存软件配置参数
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
//判断程序是否首次安装,进入指定界面,用到 sharedPreferences 保存一个
// key为"PREFERENCE_ADD_INTRODUCTION"boolean为true的键值对。
// 如果创建Preferences成功检索key对应的值不成功就返回默认值false
if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) {
StringBuilder sb = new StringBuilder();
InputStream in = null;
try {
//把资源文件放到应用程序的/raw/raw下那么就可以在应用中使用getResources获取资源后,
//以openRawResource方法不带后缀的资源文件名打开这个文件。
//第一次打开软件获取第一条默认便签的内容存进sb
in = getResources().openRawResource(R.raw.introduction);
if (in != null) {
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
char [] buf = new char[1024];
char [] buf = new char[1024];//自行定义的数值,使用者不知道有什么意义
int len = 0;
while ((len = br.read(buf)) > 0) {
sb.append(buf, 0, len);
@ -191,12 +205,15 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
}
}
//在根目录创建空的粉色的第一条默认便签WorkingNote
//public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId,
// int widgetType, int defaultBgColorId)
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()) {
//更新保存note的信息
sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit();
} else {
Log.e(TAG, "Save introduction note error");
@ -211,20 +228,29 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
startAsyncNotesListQuery();
}
//初始化资源
private void initResources() {
mContentResolver = this.getContentResolver();
mContentResolver = this.getContentResolver();//获取应用程序的数据,得到类似数据表的东西
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());
mNotesListView.setOnItemLongClickListener(this);
//为便签列表绑定适配器
mNotesListAdapter = new NotesListAdapter(this);
mNotesListView.setAdapter(mNotesListAdapter);
//在Activity中获取“新建便签”按钮并为其分别设置短按监听器和触碰监听器
mAddNewNote = (Button) findViewById(R.id.btn_new_note);
mAddNewNote.setOnClickListener(this);
mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener());
mDispatch = false;
mDispatchY = 0;
mOriginY = 0;
@ -232,7 +258,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
mState = ListEditState.NOTE_LIST;
mModeCallBack = new ModeCallback();
}
//实现接口ListView.MultiChoiceModeListener 和 OnMenuItemClickListener
private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {
private DropdownMenu mDropDownMenu;
private ActionMode mActionMode;
@ -266,15 +292,16 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
updateMenu();
return true;
}
});
return true;
}
//更新菜单:当页面已经全选时,菜单更改为“取消全选”;负责,菜单显示为“全选”
private void updateMenu() {
int selectedCount = mNotesListAdapter.getSelectedCount();
// Update dropdown menu
String format = getResources().getString(R.string.menu_select_title, selectedCount);
//更改标题
mDropDownMenu.setTitle(format);
MenuItem item = mDropDownMenu.findItem(R.id.action_select_all);
if (item != null) {
@ -297,7 +324,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
// TODO Auto-generated method stub
return false;
}
//取消删除模式时,“新建便签”按钮重新可视
public void onDestroyActionMode(ActionMode mode) {
mNotesListAdapter.setChoiceMode(false);
mNotesListView.setLongClickable(true);
@ -313,7 +340,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
mNotesListAdapter.setCheckedItem(position, checked);
updateMenu();
}
//长按便签后的顶部菜单选项点击后的处理
public boolean onMenuItemClick(MenuItem item) {
if (mNotesListAdapter.getSelectedCount() == 0) {
Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none),
@ -322,6 +349,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
switch (item.getItemId()) {
//选择删除便签
case R.id.delete:
AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
builder.setTitle(getString(R.string.alert_title_delete));
@ -338,18 +366,19 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
builder.setNegativeButton(android.R.string.cancel, null);
builder.show();
break;
//选择移动便签
case R.id.move:
startQueryDestinationFolders();
break;
//默认没有选择
default:
return false;
}
return true;
}
}//处理完毕
}
//“新建便签”点击后界面显示参数设置
private class NewNoteOnTouchListener implements OnTouchListener {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
@ -408,8 +437,8 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
return false;
}
};
}
//异步处理查询 首页/文件夹下 的便签列表
private void startAsyncNotesListQuery() {
String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION
: NORMAL_SELECTION;
@ -423,7 +452,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
public BackgroundQueryHandler(ContentResolver contentResolver) {
super(contentResolver);
}
//后台查询后显示查询结果
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
switch (token) {
@ -444,11 +473,11 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
private void showFolderListMenu(Cursor cursor) {
//文件列表的警告对话框,并配置适配器
AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
builder.setTitle(R.string.menu_title_select_folder);
final FoldersListAdapter adapter = new FoldersListAdapter(this, cursor);
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
DataUtils.batchMoveToFolder(mContentResolver,
mNotesListAdapter.getSelectedItemIds(), adapter.getItemId(which));
@ -463,28 +492,29 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
});
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<Void, Void, HashSet<AppWidgetAttribute>>() {
protected HashSet<AppWidgetAttribute> doInBackground(Void... unused) {
HashSet<AppWidgetAttribute> widgets = mNotesListAdapter.getSelectedWidget();
if (!isSyncMode()) {
// if not synced, delete notes directly
//如果没有同步,直接删除便签
if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter
.getSelectedItemIds())) {
} else {
Log.e(TAG, "Delete notes error, should not happens");
}
} else {
// in sync mode, we'll move the deleted note into the trash
// folder
// in sync mode, we'll move the deleted note into the trash folder
//在同步模式下,我们会将已删除的笔记移入回收站文件夹
if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter
.getSelectedItemIds(), Notes.ID_TRASH_FOLER)) {
Log.e(TAG, "Move notes to trash folder error, should not happens");
@ -507,7 +537,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
}.execute();
}
//删除文件夹(考虑是否处于同步模式)
private void deleteFolder(long folderId) {
if (folderId == Notes.ID_ROOT_FOLDER) {
Log.e(TAG, "Wrong folder id, should not happen " + folderId);
@ -534,14 +564,14 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
}
}
//打开便签,跳转新活动
private void openNode(NoteItemData data) {
Intent intent = new Intent(this, NoteEditActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.putExtra(Intent.EXTRA_UID, data.getId());
this.startActivityForResult(intent, REQUEST_CODE_OPEN_NODE);
}
//打开文件夹,标题可见
private void openFolder(NoteItemData data) {
mCurrentFolderId = data.getId();
startAsyncNotesListQuery();
@ -558,7 +588,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
mTitleBar.setVisibility(View.VISIBLE);
}
//点击“新建便签”的按钮调用createNewNote()函数新建便签
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_new_note:
@ -568,23 +598,24 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
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) {
@ -602,6 +633,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
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);
}
});
@ -666,6 +698,10 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
});
}
/* (non-Javadoc)
* @see android.app.Activity#onBackPressed()
*
*/
@Override
public void onBackPressed() {
switch (mState) {
@ -690,6 +726,11 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
}
/**
* @param appWidgetId
* @param appWidgetType
* widgetintent
*/
private void updateWidget(int appWidgetId, int appWidgetType) {
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
if (appWidgetType == Notes.TYPE_WIDGET_2X) {
@ -709,7 +750,8 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
setResult(RESULT_OK, intent);
}
private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() {
//声明监听器:建立文件夹的菜单,包括名称,视图,删除操作,更改名称操作;
private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() {
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
if (mFocusNoteDataItem != null) {
menu.setHeaderTitle(mFocusNoteDataItem.getSnippet());
@ -719,7 +761,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
}
};
//关闭文件夹
@Override
public void onContextMenuClosed(Menu menu) {
if (mNotesListView != null) {
@ -727,7 +769,10 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
super.onContextMenuClosed(menu);
}
/* (non-Javadoc)
* @see android.app.Activity#onContextItemSelected(android.view.MenuItem)
* menu
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
if (mFocusNoteDataItem == null) {
@ -736,9 +781,11 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
switch (item.getItemId()) {
case MENU_FOLDER_VIEW:
//打开对应文件
openFolder(mFocusNoteDataItem);
break;
case MENU_FOLDER_DELETE:
//设置确认是否删除的对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.alert_title_delete));
builder.setIcon(android.R.drawable.ic_dialog_alert);
@ -750,15 +797,16 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
});
builder.setNegativeButton(android.R.string.cancel, null);
//显示对话框
builder.show();
break;
case MENU_FOLDER_CHANGE_NAME:
//调用方法修改文件夹名称其中参数false表示修改文件夹名true是新建文件夹
showCreateOrModifyFolderDialog(false);
break;
default:
break;
}
return true;
}
@ -779,18 +827,21 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
return true;
}
//首页右上角菜单选项显示和按钮的点击后处理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
//新建文件夹
case R.id.menu_new_folder: {
showCreateOrModifyFolderDialog(true);
break;
}
//导出文本
case R.id.menu_export_text: {
exportNoteToText();
break;
}
//选择是否同步
case R.id.menu_sync: {
if (isSyncMode()) {
if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) {
@ -803,14 +854,17 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
break;
}
//软件设置
case R.id.menu_setting: {
startPreferenceActivity();
break;
}
//新建便签
case R.id.menu_new_note: {
createNewNote();
break;
}
//搜索
case R.id.menu_search:
onSearchRequested();
break;
@ -820,12 +874,17 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
return true;
}
/* (non-Javadoc)
* @see android.app.Activity#onSearchRequested()
* startSearch
*/
@Override
public boolean onSearchRequested() {
startSearch(null, false, null /* appData */, false);
return true;
}
//功能:实现将便签导出到文本功能
private void exportNoteToText() {
final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this);
new AsyncTask<Void, Void, Integer>() {
@ -868,20 +927,26 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}.execute();
}
/**
* @return
*
*/
private boolean isSyncMode() {
return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0;
}
//功能跳转到PreferenceActivity界面设置软件参数
private void startPreferenceActivity() {
Activity from = getParent() != null ? getParent() : this;
Intent intent = new Intent(from, NotesPreferenceActivity.class);
from.startActivityIfNeeded(intent, -1);
}
//函数功能:实现对便签列表项的点击事件(短按)
private class OnListItemClickListener implements OnItemClickListener {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (view instanceof NotesListItem) {
//获取点击的item项的数据
NoteItemData item = ((NotesListItem) view).getItemData();
if (mNotesListAdapter.isInChoiceMode()) {
if (item.getType() == Notes.TYPE_NOTE) {
@ -919,11 +984,12 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
}
//查询目标文件
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,
null,
Notes.CONTENT_NOTE_URI,
@ -937,6 +1003,12 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe
NoteColumns.MODIFIED_DATE + " DESC");
}
/* (non-Javadoc)
* @see android.widget.AdapterView.OnItemLongClickListener#onItemLongClick(android.widget.AdapterView, android.view.View, int, long)
*
* 便ActionModeContextMenu
* ActionMOdeContextMenu
*/
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (view instanceof NotesListItem) {
mFocusNoteDataItem = ((NotesListItem) view).getItemData();

@ -30,56 +30,75 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
/*
便CursorAdaptercursorListView
NotesListAdapter便
*/
public class NotesListAdapter extends CursorAdapter {
private static final String TAG = "NotesListAdapter";
private Context mContext;
private HashMap<Integer, Boolean> mSelectedIndex;
//便签数
private int mNotesCount;
//选择模式标记
private boolean mChoiceMode;
//桌面widget的属性包括编号和类型
public static class AppWidgetAttribute {
public int widgetId;
public int widgetType;
};
//函数功能:初始化便签适配器
//函数实现:根据传进来的内容设置相关变量
public NotesListAdapter(Context context) {
//父类对象置空
super(context, null);
//新建选项下表的hash表
mSelectedIndex = new HashMap<Integer, Boolean>();
mContext = context;
mNotesCount = 0;
}
@Override
/*
*使NotesListItem*/
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return new NotesListItem(context);
}
@Override
//函数功能:将已经存在的视图和鼠标指向的数据进行捆绑
public void bindView(View view, Context context, Cursor cursor) {
if (view instanceof NotesListItem) {
//若view是NotesListItem的一个实例
// 则新建一个项目选项并且用bind跟将view和鼠标内容便签数据捆绑在一起
NoteItemData itemData = new NoteItemData(context, cursor);
((NotesListItem) view).bind(context, itemData, mChoiceMode,
isSelectedItem(cursor.getPosition()));
}
}
//函数功能:设置勾选框
public void setCheckedItem(final int position, final boolean checked) {
//根据定位和是否勾选设置下标
mSelectedIndex.put(position, checked);
//在修改后刷新activity
notifyDataSetChanged();
}
//函数功能:判断单选按钮是否勾选
public boolean isInChoiceMode() {
return mChoiceMode;
}
/*
* mode*/
public void setChoiceMode(boolean mode) {
mSelectedIndex.clear();
mChoiceMode = mode;
}
//函数功能:选择全部选项
public void selectAll(boolean checked) {
//获取光标位置
Cursor cursor = getCursor();
//遍历所有光标可用的位置在判断为便签类型之后勾选单项框
for (int i = 0; i < getCount(); i++) {
if (cursor.moveToPosition(i)) {
if (NoteItemData.getNoteType(cursor) == Notes.TYPE_NOTE) {
@ -88,15 +107,20 @@ public class NotesListAdapter extends CursorAdapter {
}
}
}
//函数功能:建立选择项的下标列表
public HashSet<Long> getSelectedItemIds() {
//建立hash表
HashSet<Long> itemSet = new HashSet<Long>();
//遍历所有的关键
for (Integer position : mSelectedIndex.keySet()) {
//若光标位置可用
if (mSelectedIndex.get(position) == true) {
Long id = getItemId(position);
if (id == Notes.ID_ROOT_FOLDER) {
//源文件不需要添加
Log.d(TAG, "Wrong item id, should not happen");
} else {
} else{
//则将id该下标加入选项集合中
itemSet.add(id);
}
}
@ -104,13 +128,14 @@ public class NotesListAdapter extends CursorAdapter {
return itemSet;
}
//函数功能建立桌面Widget的选项表
public HashSet<AppWidgetAttribute> getSelectedWidget() {
HashSet<AppWidgetAttribute> itemSet = new HashSet<AppWidgetAttribute>();
for (Integer position : mSelectedIndex.keySet()) {
if (mSelectedIndex.get(position) == true) {
Cursor c = (Cursor) getItem(position);
if (c != null) {
//光标位置可用的话就建立新的Widget属性并编辑下标和类型最后添加到选项集中
AppWidgetAttribute widget = new AppWidgetAttribute();
NoteItemData item = new NoteItemData(mContext, c);
widget.widgetId = item.getWidgetId();
@ -127,12 +152,14 @@ public class NotesListAdapter extends CursorAdapter {
}
return itemSet;
}
//函数功能:获取选项个数
public int getSelectedCount() {
//获取选项下标的值
Collection<Boolean> values = mSelectedIndex.values();
if (null == values) {
return 0;
}
//初始化迭代器
Iterator<Boolean> iter = values.iterator();
int count = 0;
while (iter.hasNext()) {
@ -142,41 +169,44 @@ public class NotesListAdapter extends CursorAdapter {
}
return count;
}
//函数功能:判断是否全部选中
public boolean isAllSelected() {
int checkedCount = getSelectedCount();
//根据选项数是否等于便签的个数判断
return (checkedCount != 0 && checkedCount == mNotesCount);
}
//函数功能:判断是否为选项表
public boolean isSelectedItem(final int position) {
if (null == mSelectedIndex.get(position)) {
return false;
}
return mSelectedIndex.get(position);
}
//函数功能在activity内容发生局部变动的时候回调该函数计算便签的数量
@Override
protected void onContentChanged() {
super.onContentChanged();
calcNotesCount();
}
//函数功能在activity内容发生局部变动的时候回调该函数计算便签的数量
@Override
public void changeCursor(Cursor cursor) {
super.changeCursor(cursor);
calcNotesCount();
}
//函数功能:计算便签数量
private void calcNotesCount() {
mNotesCount = 0;
//获取总数同时遍历
for (int i = 0; i < getCount(); i++) {
Cursor c = (Cursor) getItem(i);
//若该位置不为空并且文本类型为便签就+1
if (c != null) {
if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) {
mNotesCount++;
}
} else {
Log.e(TAG, "Invalid cursor");
Log.e(TAG, "该列表项不是便签,不计入便签数");
return;
}
}

Loading…
Cancel
Save