/* * 版权所有 (c) 2010-2011,MiCode 开源社区 (www.micode.net) * 根据 Apache 许可证 2.0 版本("许可证")授权; * 除非符合许可证的规定,否则不得使用本文件。 * 您可以从以下网址获取许可证副本: * http://www.apache.org/licenses/LICENSE-2.0 * 除非适用法律要求或书面同意,本软件按"原样"分发, * 没有任何明示或暗示的保证或条件。 * 详见许可证中规定的权限和限制。 * (注:这是一份标准的Apache许可证2.0版本的开源声明) */ // 定义包路径 package net.micode.notes.ui; // 导入Android相关类库 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; // 资源ID引用 // 导入数据类 import net.micode.notes.data.Notes; // 笔记常量 import net.micode.notes.data.Notes.NoteColumns; // 笔记表列名 /** * 文件夹列表适配器 * 继承自CursorAdapter,用于将文件夹数据绑定到列表视图 */ public class FoldersListAdapter extends CursorAdapter { // 查询投影列(需要获取的字段) public static final String [] PROJECTION = { NoteColumns.ID, // 笔记ID NoteColumns.SNIPPET // 文件夹名称(使用SNIPPET字段存储) }; // 列索引常量 public static final int ID_COLUMN = 0; // ID列索引 public static final int NAME_COLUMN = 1; // 名称列索引 /** * 构造函数 * @param context 上下文对象 * @param c 数据库游标 */ public FoldersListAdapter(Context context, Cursor c) { super(context, c); // TODO: 可在此处添加额外初始化代码 } /** * 创建新列表项视图 * @param context 上下文 * @param cursor 数据游标 * @param parent 父视图组 * @return 创建好的列表项视图 */ @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { // 创建自定义的文件夹列表项视图 return new FolderListItem(context); } /** * 绑定数据到已有视图 * @param view 要绑定的视图 * @param context 上下文 * @param cursor 数据游标 */ @Override public void bindView(View view, Context context, Cursor cursor) { // 确保视图是FolderListItem类型 if (view instanceof FolderListItem) { String folderName; // 判断是否为根文件夹(特殊处理) if (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) { folderName = context.getString(R.string.menu_move_parent_folder); } else { folderName = cursor.getString(NAME_COLUMN); } // 调用视图的bind方法设置名称 ((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); } /** * 自定义文件夹列表项视图(内部类) */ private static class FolderListItem extends LinearLayout { private final TextView mName; // 显示文件夹名称的文本视图 /** * 构造函数 * @param context 上下文 */ public FolderListItem(Context context) { super(context); // 加载布局文件 inflate(context, R.layout.folder_list_item, this); // 获取名称文本视图 mName = (TextView) findViewById(R.id.tv_folder_name); } /** * 绑定文件夹名称 * @param name 文件夹名称 */ public void bind(String name) { mName.setText(name); // 设置文本内容 } } }