Update NotesListAdapter.java

main
pf45q8f3g 7 months ago
parent 5e71f05915
commit 87d663816f

@ -1,273 +1,249 @@
/* /*
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) * (c) 2010-2011, MiCode (www.micode.net)
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * 使 Apache License, Version 2.0
* you may not use this file except in compliance with the License. * 使
* You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an "AS IS" BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and
* limitations under the License.
*/ */
package net.micode.notes.ui; package net.micode.notes.ui;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.CursorAdapter; import android.widget.CursorAdapter;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes; import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Collection; /**
import java.util.HashMap; * NotesListAdapter 便
import java.util.HashSet; * CursorAdapter便 ListView
import java.util.Iterator; */
public class NotesListAdapter extends CursorAdapter {
private static final String TAG = "NotesListAdapter";
/* private Context mContext;
* 便CursorAdaptercursorListView private HashMap<Integer, Boolean> mSelectedIndex;
* NotesListAdapter便 private int mNotesCount; // 便签数
*/ private boolean mChoiceMode; // 选择模式标记
public class NotesListAdapter extends CursorAdapter {
private static final String TAG = "NotesListAdapter"; /**
private Context mContext; *
private HashMap<Integer, Boolean> mSelectedIndex; */
private int mNotesCount; //便签数 public static class AppWidgetAttribute {
private boolean mChoiceMode; //选择模式标记 public int widgetId;
public int widgetType;
/* }
* widget
*/ /**
public static class AppWidgetAttribute { * NotesListAdapter
public int widgetId; * @param context
public int widgetType; */
}; public NotesListAdapter(Context context) {
super(context, null); // 父类对象置空
/* mSelectedIndex = new HashMap<Integer, Boolean>(); // 新建选项下标的哈希表
* 便 mContext = context;
* mNotesCount = 0;
*/ }
public NotesListAdapter(Context context) {
super(context, null); //父类对象置空 @Override
mSelectedIndex = new HashMap<Integer, Boolean>(); //新建选项下标的hash表 /**
mContext = context; *
mNotesCount = 0; * @param context
} * @param cursor
* @param parent
@Override * @return
/* */
* public View newView(Context context, Cursor cursor, ViewGroup parent) {
* 使NotesListItem return new NotesListItem(context);
*/ }
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return new NotesListItem(context); @Override
} /**
*
/* * @param view
* * @param context
* * @param cursor
*/ */
@Override public void bindView(View view, Context context, Cursor cursor) {
public void bindView(View view, Context context, Cursor cursor) { if (view instanceof NotesListItem) {
if (view instanceof NotesListItem) { NoteItemData itemData = new NoteItemData(context, cursor);
//若view是NotesListItem的一个实例 ((NotesListItem) view).bind(context, itemData, mChoiceMode,
NoteItemData itemData = new NoteItemData(context, cursor); isSelectedItem(cursor.getPosition()));
((NotesListItem) view).bind(context, itemData, mChoiceMode, }
isSelectedItem(cursor.getPosition())); }
//则新建一个项目选项并且用bind跟将view和鼠标内容便签数据捆绑在一起
} /**
} *
* @param position
/* * @param checked
* */
* public void setCheckedItem(final int position, final boolean checked) {
*/ mSelectedIndex.put(position, checked);
public void setCheckedItem(final int position, final boolean checked) { notifyDataSetChanged();
mSelectedIndex.put(position, checked); }
//根据定位和是否勾选设置下标
notifyDataSetChanged(); /**
//在修改后刷新activity *
} * @return true false
*/
/* public boolean isInChoiceMode() {
* return mChoiceMode;
*/ }
public boolean isInChoiceMode() {
return mChoiceMode; /**
} *
* @param mode
/* */
* public void setChoiceMode(boolean mode) {
* mode mSelectedIndex.clear();
*/ mChoiceMode = mode;
public void setChoiceMode(boolean mode) { }
mSelectedIndex.clear();
mChoiceMode = mode; /**
} *
* @param checked
/* */
* public void selectAll(boolean checked) {
* Cursor cursor = getCursor();
*/ for (int i = 0; i < getCount(); i++) {
public void selectAll(boolean checked) { if (cursor.moveToPosition(i)) {
Cursor cursor = getCursor(); if (NoteItemData.getNoteType(cursor) == Notes.TYPE_NOTE) {
//获取光标位置 setCheckedItem(i, checked);
for (int i = 0; i < getCount(); i++) { }
if (cursor.moveToPosition(i)) { }
if (NoteItemData.getNoteType(cursor) == Notes.TYPE_NOTE) { }
setCheckedItem(i, checked); }
}
} /**
} * ID
//遍历所有光标可用的位置在判断为便签类型之后勾选单项框 * @return ID
} */
public HashSet<Long> getSelectedItemIds() {
/* HashSet<Long> itemSet = new HashSet<Long>();
* for (Integer position : mSelectedIndex.keySet()) {
* if (mSelectedIndex.get(position) == true) {
*/ Long id = getItemId(position);
public HashSet<Long> getSelectedItemIds() { if (id == Notes.ID_ROOT_FOLDER) {
HashSet<Long> itemSet = new HashSet<Long>(); Log.d(TAG, "Wrong item id, should not happen");
//建立hash表 } else {
for (Integer position : mSelectedIndex.keySet()) { itemSet.add(id);
//遍历所有的关键 }
if (mSelectedIndex.get(position) == true) { }
//若光标位置可用 }
Long id = getItemId(position); return itemSet;
if (id == Notes.ID_ROOT_FOLDER) { }
//原文件不需要添加
Log.d(TAG, "Wrong item id, should not happen"); /**
} else { *
itemSet.add(id); * @return
} */
//则将id该下标假如选项集合中 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);
return itemSet; if (c != null) {
} AppWidgetAttribute widget = new AppWidgetAttribute();
NoteItemData item = new NoteItemData(mContext, c);
/* widget.widgetId = item.getWidgetId();
* Widget widget.widgetType = item.getWidgetType();
* itemSet.add(widget);
*/ } else {
public HashSet<AppWidgetAttribute> getSelectedWidget() { Log.e(TAG, "Invalid cursor");
HashSet<AppWidgetAttribute> itemSet = new HashSet<AppWidgetAttribute>(); return null;
for (Integer position : mSelectedIndex.keySet()) { }
if (mSelectedIndex.get(position) == true) { }
Cursor c = (Cursor) getItem(position); }
//以上4句和getSelectedItemIds一样不再重复 return itemSet;
if (c != null) { }
//光标位置可用的话就建立新的Widget属性并编辑下标和类型最后添加到选项集中
AppWidgetAttribute widget = new AppWidgetAttribute(); /**
NoteItemData item = new NoteItemData(mContext, c); *
widget.widgetId = item.getWidgetId(); * @return
widget.widgetType = item.getWidgetType(); */
itemSet.add(widget); public int getSelectedCount() {
/** Collection<Boolean> values = mSelectedIndex.values();
* Don't close cursor here, only the adapter could close it if (null == values) {
*/ return 0;
} else { }
Log.e(TAG, "Invalid cursor"); Iterator<Boolean> iter = values.iterator();
return null; int count = 0;
} while (iter.hasNext()) {
} if (true == iter.next()) {
} count++;
return itemSet; }
} }
return count;
/* }
*
* /**
*/ *
public int getSelectedCount() { * @return true false
Collection<Boolean> values = mSelectedIndex.values(); */
//首先获取选项下标的值 public boolean isAllSelected() {
if (null == values) { int checkedCount = getSelectedCount();
return 0; return (checkedCount != 0 && checkedCount == mNotesCount);
} }
Iterator<Boolean> iter = values.iterator();
//初始化叠加器 /**
int count = 0; *
while (iter.hasNext()) { * @param position
if (true == iter.next()) { * @return true false
//若value值为真计数+1 */
count++; public boolean isSelectedItem(final int position) {
} if (null == mSelectedIndex.get(position)) {
} return false;
return count; }
} return mSelectedIndex.get(position);
}
/*
* @Override
* /**
*/ * 便
public boolean isAllSelected() { */
int checkedCount = getSelectedCount(); protected void onContentChanged() {
return (checkedCount != 0 && checkedCount == mNotesCount); super.onContentChanged();
//获取选项数看是否等于便签的个数 calcNotesCount();
} }
/* @Override
* /**
* * 便
*/ * @param cursor
public boolean isSelectedItem(final int position) { */
if (null == mSelectedIndex.get(position)) { public void changeCursor(Cursor cursor) {
return false; super.changeCursor(cursor);
} calcNotesCount();
return mSelectedIndex.get(position); }
}
/**
@Override * 便
/* */
* activity便 private void calcNotesCount() {
* mNotesCount = 0;
*/ for (int i = 0; i < getCount(); i++) {
protected void onContentChanged() { Cursor c = (Cursor) getItem(i);
super.onContentChanged(); if (c != null) {
//执行基类函数 if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) {
calcNotesCount(); mNotesCount++;
} }
} else {
@Override Log.e(TAG, "Invalid cursor");
/* return;
* activity便 }
*/ }
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);
if (c != null) {
if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) {
mNotesCount++;
//若该位置不为空并且文本类型为便签就+1
}
} else {
Log.e(TAG, "Invalid cursor");
return;
}
//否则报错
}
}
}
Loading…
Cancel
Save