You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MiNote/src/ui/FoldersListAdapter.java

131 lines
4.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* 版权所有 (c) 2010-2011MiCode 开源社区 (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); // 设置文本内容
}
}
}