Android 日历适配器 (CalendarAdapter) 代码优化:日期点击监听
以下是修正后的代码:
package com.example.pg_helper;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Set;
public class CalendarAdapter extends BaseAdapter {
private Context context;
private List<Date> dates;
private Calendar currentDate;
private SimpleDateFormat dateFormat = new SimpleDateFormat('dd', Locale.getDefault());
private Set<Date> markedDates;
private OnDateClickListener onDateClickListener;
public CalendarAdapter(Context context, List<Date> dates, Calendar currentDate, Set<Date> markedDates) {
this.context = context;
this.dates = dates;
this.currentDate = currentDate;
this.markedDates = markedDates;
}
@Override
public int getCount() {
return dates.size();
}
@Override
public Object getItem(int position) {
return dates.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
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);
}
}
修正后的代码中,我将setOnClickListener()方法放在了正确的位置,并且移除了多余的括号和分号。现在,你可以在CalendarAdapter中设置日期点击监听器,并在点击事件发生时回调onDateClick()方法。
原文地址: https://www.cveoy.top/t/topic/bklq 著作权归作者所有。请勿转载和采集!