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/ui/FoldersListAdapter.java

124 lines
4.3 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-2011The 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); // 设置文件夹名称
}
}
}