// 自定义列表项控件，继承LinearLayout实现复合视图
public class NotesListItem extends LinearLayout {
    // 声明视图组件
    private ImageView mAlert;     // 提醒图标（时钟/通话记录图标）
    private TextView mTitle;      // 主标题（笔记内容/文件夹名）
    private TextView mTime;       // 时间显示（相对时间格式）
    private TextView mCallName;   // 来电人姓名（通话记录专用）
    private NoteItemData mItemData; // 数据模型对象
    private CheckBox mCheckBox;   // 多选框（用于选择模式）

    // 构造函数
    public NotesListItem(Context context) {
        super(context);
        inflate(context, R.layout.note_item, this); // 加载布局note_item.xml到当前视图
        
        // 初始化视图组件
        mAlert = (ImageView) findViewById(R.id.iv_alert_icon); // 提醒图标
        mTitle = (TextView) findViewById(R.id.tv_title);       // 主标题文本
        mTime = (TextView) findViewById(R.id.tv_time);         // 时间文本
        mCallName = (TextView) findViewById(R.id.tv_name);      // 来电人姓名
        mCheckBox = (CheckBox) findViewById(android.R.id.checkbox); // 系统预定义checkbox ID
    }

    // 数据绑定方法（核心逻辑）
    public void bind(Context context, NoteItemData data, 
                    boolean choiceMode, boolean checked) {
        // 处理多选模式显示
        if (choiceMode && data.getType() == Notes.TYPE_NOTE) {
            mCheckBox.setVisibility(View.VISIBLE); // 仅普通笔记显示复选框
            mCheckBox.setChecked(checked);         // 设置选中状态
        } else {
            mCheckBox.setVisibility(View.GONE);    // 文件夹/通话记录隐藏复选框
        }

        mItemData = data; // 缓存数据对象
        
        // 分支1：通话记录文件夹
        if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) {
            mCallName.setVisibility(View.GONE);    // 隐藏来电人姓名
            mAlert.setVisibility(View.VISIBLE);    // 显示通话记录图标
            mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); // 主标题样式
            mTitle.setText(context.getString(R.string.call_record_folder_name) // "通话记录"
                    + context.getString(R.string.format_folder_files_count, data.getNotesCount())); // 追加数量（如"(3)"）
            mAlert.setImageResource(R.drawable.call_record); // 设置通话记录图标
            
        // 分支2：通话记录条目    
        } else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) {
            mCallName.setVisibility(View.VISIBLE); // 显示来电人姓名
            mCallName.setText(data.getCallName()); // 设置来电人（如"张三"）
            mTitle.setTextAppearance(context,R.style.TextAppearanceSecondaryItem); // 副标题样式
            mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); // 格式化内容预览
            if (data.hasAlert()) { // 判断是否有提醒
                mAlert.setImageResource(R.drawable.clock); // 显示时钟图标
                mAlert.setVisibility(View.VISIBLE);
            } else {
                mAlert.setVisibility(View.GONE);   // 无提醒隐藏图标
            }
            
        // 分支3：普通笔记/文件夹    
        } else {
            mCallName.setVisibility(View.GONE);    // 隐藏来电人姓名
            mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); // 主样式

            // 子分支3-1：文件夹类型
            if (data.getType() == Notes.TYPE_FOLDER) {
                mTitle.setText(data.getSnippet()    // 文件夹名称
                        + context.getString(R.string.format_folder_files_count, // 追加数量
                                data.getNotesCount())); 
                mAlert.setVisibility(View.GONE);   // 文件夹不显示图标
                
            // 子分支3-2：普通笔记    
            } else {
                mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); // 内容预览
                if (data.hasAlert()) { // 提醒处理
                    mAlert.setImageResource(R.drawable.clock);
                    mAlert.setVisibility(View.VISIBLE);
                } else {
                    mAlert.setVisibility(View.GONE);
                }
            }
        }
        
        // 设置时间显示（例如"2小时前"）
        mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate()));
        
        setBackground(data); // 根据位置设置背景样式
    }

    // 背景设置逻辑（实现列表项不同位置的圆角效果）
    private void setBackground(NoteItemData data) {
        int id = data.getBgColorId(); // 获取背景颜色ID
        
        // 仅普通笔记需要特殊背景处理
        if (data.getType() == Notes.TYPE_NOTE) {
            // 条件1：单一条目或跟随文件夹的第一个条目
            if (data.isSingle() || data.isOneFollowingFolder()) {
                setBackgroundResource(NoteItemBgResources.getNoteBgSingleRes(id)); // 单一行圆角
                
            // 条件2：列表最后一项    
            } else if (data.isLast()) {
                setBackgroundResource(NoteItemBgResources.getNoteBgLastRes(id)); // 底部圆角
                
            // 条件3：列表第一项或多条目组的第一个    
            } else if (data.isFirst() || data.isMultiFollowingFolder()) {
                setBackgroundResource(NoteItemBgResources.getNoteBgFirstRes(id)); // 顶部圆角
                
            // 默认：中间条目    
            } else {
                setBackgroundResource(NoteItemBgResources.getNoteBgNormalRes(id)); // 直角背景
            }
        }
        // 其他类型（文件夹/通话记录）使用默认背景
    }
}
public NoteItemData getItemData() {
    return mItemData; // 返回成员变量存储的数据模型引用
}
