/* * 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); // 设置文件夹名称 } } }