public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;

    if (view == null) {
        LayoutInflater inflater = LayoutInflater.from(context);
        view = inflater.inflate(R.layout.calendar_item, parent, false);
    }

    TextView tvDate = view.findViewById(R.id.tv_date);
    Date date = dates.get(position);
    tvDate.setText(dateFormat.format(date));

    if (date.getMonth() != currentDate.getTime().getMonth()) {
        tvDate.setTextColor(Color.GRAY);
    } else {
        tvDate.setTextColor(Color.BLACK);
    }

    if (markedDates.contains(date)) {
        tvDate.setBackgroundResource(R.drawable.classtable); // 设置已打卡日期的背景样式
    } else {
        tvDate.setBackground(null); // 清除未打卡日期的背景样式
    }

    tvDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (onDateClickListener != null) {
                onDateClickListener.onDateClick(date);
            }
        }
    });

    return view;
}

public void setOnDateClickListener(OnDateClickListener listener) {
    this.onDateClickListener = listener;
}

public interface OnDateClickListener {
    void onDateClick(Date date);
}

在这段代码中,我们首先检查 convertView 是否为空。如果为空,则使用 LayoutInflater 加载 calendar_item 布局文件。然后,我们获取日期文本视图 tvDate,并根据日期设置其文本颜色和背景。

为了处理日期点击事件,我们为 tvDate 设置了一个 OnClickListener。当用户点击日期时,会触发 onClick() 方法,该方法会调用 onDateClickListeneronDateClick() 方法,并将当前日期作为参数传递。

代码解析:

  • convertView: 如果列表项的视图可以被重用,则该参数将是之前创建的视图。
  • LayoutInflater: 用于从布局文件创建视图对象。
  • dateFormat: 用于格式化日期对象的 SimpleDateFormat 对象。
  • markedDates: 包含所有已标记日期的集合。
  • onDateClickListener: 用于处理日期点击事件的监听器。

总结:

getView() 方法是 Android 自定义日历视图中的核心方法,它负责加载布局、设置日期文本样式以及处理日期点击事件。通过理解 getView() 方法的工作原理,我们可以轻松地创建功能强大的自定义日历视图。

Android 自定义日历视图:getView() 方法详解及日期点击事件处理

原文地址: https://www.cveoy.top/t/topic/bkhv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录