|
|
/*
|
|
|
* 版权所有 (c) 2010-2011,The MiCode Open Source Community (www.micode.net)
|
|
|
*
|
|
|
* 本软件根据 Apache 许可证 2.0 版("许可证")发布;
|
|
|
* 除非符合许可证,否则不得使用此文件。
|
|
|
* 您可以在以下网址获取许可证副本:
|
|
|
*
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
*
|
|
|
* 除非法律要求或书面同意,软件
|
|
|
* 根据许可证分发的内容按"原样"提供,
|
|
|
* 不附带任何明示或暗示的保证或条件。
|
|
|
* 请参阅许可证,了解有关权限和限制的具体语言。
|
|
|
*/
|
|
|
|
|
|
package net.micode.notes.ui;
|
|
|
|
|
|
import android.content.Context;
|
|
|
import android.database.Cursor;
|
|
|
import android.view.View;
|
|
|
import android.view.ViewGroup;
|
|
|
import android.widget.CursorAdapter;
|
|
|
import android.widget.LinearLayout;
|
|
|
import android.widget.TextView;
|
|
|
|
|
|
import net.micode.notes.R;
|
|
|
import net.micode.notes.data.Notes;
|
|
|
import net.micode.notes.data.Notes.NoteColumns;
|
|
|
|
|
|
/**
|
|
|
* 文件夹列表适配器(用于显示笔记文件夹列表)
|
|
|
* 功能:
|
|
|
* 1. 将数据库中的文件夹数据映射到列表项视图
|
|
|
* 2. 处理特殊文件夹(如根文件夹)的显示逻辑
|
|
|
* 3. 提供获取文件夹名称的接口方法
|
|
|
*/
|
|
|
public class FoldersListAdapter extends CursorAdapter {
|
|
|
// 查询投影:定义从数据库查询的字段
|
|
|
public static final String [] PROJECTION = {
|
|
|
NoteColumns.ID, // 文件夹ID
|
|
|
NoteColumns.SNIPPET // 文件夹名称(此处Snippet用作文件夹名称)
|
|
|
};
|
|
|
|
|
|
// 列索引常量(用于快速访问Cursor中的数据)
|
|
|
public static final int ID_COLUMN = 0;
|
|
|
public static final int NAME_COLUMN = 1;
|
|
|
|
|
|
/**
|
|
|
* 构造方法:初始化适配器
|
|
|
* @param context 上下文
|
|
|
* @param c 包含文件夹数据的Cursor
|
|
|
*/
|
|
|
public FoldersListAdapter(Context context, Cursor c) {
|
|
|
super(context, c, 0); // 调用父类构造方法,传递Cursor
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 创建新的列表项视图
|
|
|
* @param context 上下文
|
|
|
* @param cursor 当前数据Cursor
|
|
|
* @param parent 父视图组
|
|
|
* @return 新创建的列表项视图
|
|
|
*/
|
|
|
@Override
|
|
|
public View newView(Context context, Cursor cursor, ViewGroup parent) {
|
|
|
return new FolderListItem(context); // 创建自定义文件夹列表项视图
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 将数据绑定到已创建的视图
|
|
|
* @param view 要绑定数据的视图
|
|
|
* @param context 上下文
|
|
|
* @param cursor 包含数据的Cursor
|
|
|
*/
|
|
|
@Override
|
|
|
public void bindView(View view, Context context, Cursor cursor) {
|
|
|
if (view instanceof FolderListItem) {
|
|
|
// 获取文件夹名称(特殊处理根文件夹)
|
|
|
String folderName = (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER)
|
|
|
? context.getString(R.string.menu_move_parent_folder) // 根文件夹显示特定名称
|
|
|
: cursor.getString(NAME_COLUMN); // 普通文件夹显示数据库中的名称
|
|
|
|
|
|
((FolderListItem) view).bind(folderName); // 绑定文件夹名称到视图
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取指定位置的文件夹名称
|
|
|
* @param context 上下文
|
|
|
* @param position 列表位置
|
|
|
* @return 文件夹名称
|
|
|
*/
|
|
|
public String getFolderName(Context context, int position) {
|
|
|
Cursor cursor = (Cursor) getItem(position);
|
|
|
return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER)
|
|
|
? context.getString(R.string.menu_move_parent_folder)
|
|
|
: cursor.getString(NAME_COLUMN);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 文件夹列表项视图(自定义LinearLayout)
|
|
|
* 功能:
|
|
|
* 1. 加载列表项布局
|
|
|
* 2. 提供绑定文件夹名称的方法
|
|
|
*/
|
|
|
private class FolderListItem extends LinearLayout {
|
|
|
private TextView mName; // 文件夹名称显示文本框
|
|
|
|
|
|
public FolderListItem(Context context) {
|
|
|
super(context);
|
|
|
// 加载列表项布局并添加到当前视图
|
|
|
inflate(context, R.layout.folder_list_item, this);
|
|
|
mName = findViewById(R.id.tv_folder_name); // 初始化名称文本框
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 绑定文件夹名称到视图
|
|
|
* @param name 文件夹名称
|
|
|
*/
|
|
|
public void bind(String name) {
|
|
|
mName.setText(name); // 设置文件夹名称
|
|
|
}
|
|
|
}
|
|
|
} |