|
|
/*
|
|
|
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
|
|
|
*
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
* 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
|
|
|
*
|
|
|
* 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;
|
|
|
|
|
|
import android.content.Context;
|
|
|
// 引入 Context 类,用于访问应用的环境、资源、启动活动等。
|
|
|
import android.database.Cursor;
|
|
|
// 引入 Cursor 类,表示查询结果集,通常用于访问数据库中的记录。
|
|
|
import android.view.View;
|
|
|
// 引入 View 类,所有 UI 控件的基类。
|
|
|
import android.view.ViewGroup;
|
|
|
// 引入 ViewGroup 类,表示可以包含其他视图的容器类。
|
|
|
import android.widget.CursorAdapter;
|
|
|
// 引入 CursorAdapter 类,用于绑定数据库查询结果与 UI 元素。
|
|
|
import android.widget.LinearLayout;
|
|
|
// 引入 LinearLayout 类,线性布局容器,用于按顺序排列视图。
|
|
|
import android.widget.TextView;
|
|
|
// 引入 TextView 类,用于显示文本。
|
|
|
|
|
|
import net.micode.notes.R;
|
|
|
// 引入 R 类,自动生成的资源类,访问应用的资源(如字符串、布局、ID 等)。
|
|
|
import net.micode.notes.data.Notes;
|
|
|
// 引入 Notes 类,表示笔记相关的数据模型。
|
|
|
import net.micode.notes.data.Notes.NoteColumns;
|
|
|
// 引入 NoteColumns 类,表示与笔记相关的数据库字段。
|
|
|
|
|
|
// FoldersListAdapter 类是一个自定义的 CursorAdapter,用于展示文件夹列表。
|
|
|
public class FoldersListAdapter extends CursorAdapter {
|
|
|
|
|
|
// 定义查询投影(即数据库查询时需要返回的列)。
|
|
|
public static final String[] PROJECTION = {
|
|
|
NoteColumns.ID, // 文件夹的唯一 ID
|
|
|
NoteColumns.SNIPPET // 文件夹的简短名称(或者其他相关信息)
|
|
|
};
|
|
|
|
|
|
// 定义列的索引,方便后续获取对应列的数据。
|
|
|
public static final int ID_COLUMN = 0; // ID 列索引
|
|
|
public static final int NAME_COLUMN = 1; // 文件夹名称列索引
|
|
|
|
|
|
// 构造函数,接收 Context 和 Cursor,传递给父类的构造函数。
|
|
|
public FoldersListAdapter(Context context, Cursor c) {
|
|
|
super(context, c); // 调用父类 CursorAdapter 的构造函数
|
|
|
}
|
|
|
|
|
|
// newView 方法负责创建新的视图(即每一行的数据项)。
|
|
|
@Override
|
|
|
public View newView(Context context, Cursor cursor, ViewGroup parent) {
|
|
|
return new FolderListItem(context);
|
|
|
// 返回一个新的 FolderListItem 视图(表示文件夹项)。
|
|
|
}
|
|
|
|
|
|
// bindView 方法负责绑定数据到视图上,通常是处理显示和数据的绑定。
|
|
|
@Override
|
|
|
public void bindView(View view, Context context, Cursor cursor) {
|
|
|
if (view instanceof FolderListItem) {
|
|
|
// 确保视图是 FolderListItem 类型
|
|
|
// 获取文件夹的名称。如果是根文件夹,则显示特定的名称(菜单中的 "父文件夹"),否则显示文件夹名称。
|
|
|
String folderName = (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER)
|
|
|
? context.getString(R.string.menu_move_parent_folder)
|
|
|
: cursor.getString(NAME_COLUMN);
|
|
|
|
|
|
// 将获取的名称绑定到 FolderListItem 中
|
|
|
((FolderListItem) view).bind(folderName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// getFolderName 方法用于根据位置获取文件夹名称。
|
|
|
public String getFolderName(Context context, int position) {
|
|
|
Cursor cursor = (Cursor) getItem(position);
|
|
|
// 获取指定位置的 Cursor 数据
|
|
|
// 根据文件夹的 ID 返回对应的名称
|
|
|
return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER)
|
|
|
? context.getString(R.string.menu_move_parent_folder)
|
|
|
: cursor.getString(NAME_COLUMN);
|
|
|
}
|
|
|
|
|
|
// FolderListItem 类表示文件夹列表项的视图,它是一个 LinearLayout。
|
|
|
private class FolderListItem extends LinearLayout {
|
|
|
private TextView mName;
|
|
|
// 用于显示文件夹名称的 TextView 控件。
|
|
|
|
|
|
// FolderListItem 的构造函数,初始化视图和控件。
|
|
|
public FolderListItem(Context context) {
|
|
|
super(context);
|
|
|
inflate(context, R.layout.folder_list_item, this);
|
|
|
// 加载 folder_list_item 布局文件
|
|
|
mName = (TextView) findViewById(R.id.tv_folder_name);
|
|
|
// 获取文件夹名称显示控件
|
|
|
}
|
|
|
|
|
|
// bind 方法用于将文件夹名称绑定到 TextView 上。
|
|
|
public void bind(String name) {
|
|
|
mName.setText(name); // 设置文件夹名称
|
|
|
}
|
|
|
}
|
|
|
}
|