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

110 lines
4.9 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.

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