我正在使用JAVA创建一个android应用程序,在其中它将显示带有一些事件的日历。我在GridLayoutManager
中的回收器视图的帮助下创建日历,并在java.time.LocalDate
的帮助下解析日期。
我需要关于如何使用recycler视图在网格布局单元中显示事件的帮助。我不知道如何做到这一点,也不知道如何把这些活动放在回收者的视野中。我已经为adapter类、viewholder类、Calendar utils类和main activity类编写了代码。
适配器类:-
private final ArrayList<LocalDate> daysOfMonth;
private final OnItemListner onItemListner;
public CalAdapter(ArrayList<LocalDate> daysOfMonth, OnItemListner onItemListner) {
this.daysOfMonth = daysOfMonth;
this.onItemListner = onItemListner;
}
public CalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.calendar_cell_hp, parent, false);
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.height = (int) (parent.getHeight() * 0.166666666); //This will give the calendar cell hieght
return new CalViewHolder(view, onItemListner);
}
public void onBindViewHolder(@NonNull CalViewHolder holder, int position) {
//holder.dayOfMonth.setText(daysOfMonth.get(position));
final LocalDate date = daysOfMonth.get(position);
if (date == null)
holder.dayOfMonth.setText("");
else {
holder.dayOfMonth.setText(String.valueOf(date.getDayOfMonth()));
if (date.equals(CalendarUtils.selectedDate)) //this will display current date
holder.parentView.setBackgroundColor(Color.BLUE); //this will display current date
}
}
public int getItemCount() {
return daysOfMonth.size();
}
//this will show the date on click
public interface OnItemListner{
void onItemClick(int position, String dayText);
}
视图持有者类
class CalViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public final View parentView;
public final TextView dayOfMonth;
private final CalAdapter.OnItemListner onItemListner;
public CalViewHolder(@NonNull View itemView, CalAdapter.OnItemListner onItemListner) {
super(itemView);
parentView = itemView.findViewById(R.id.parentView);
dayOfMonth = itemView.findViewById(R.id.cellDayTextHP);
this.onItemListner = onItemListner;
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
onItemListner.onItemClick(getAdapterPosition(), (String) dayOfMonth.getText());
}
}
日历Utils类
public static LocalDate selectedDate;
public static String monthYearFromDate(LocalDate date)
{
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM yyyy");
return date.format(formatter);
}
@RequiresApi(api = Build.VERSION_CODES.O)
public static ArrayList<LocalDate> daysInMonthArray(LocalDate date)
{
ArrayList<LocalDate> daysInMonthArray = new ArrayList<>();
YearMonth yearMonth = YearMonth.from(date);
int daysInMonth = yearMonth.lengthOfMonth();
LocalDate firstOfMonth = CalendarUtils.selectedDate.withDayOfMonth(1);
int dayOfWeek = firstOfMonth.getDayOfWeek().getValue();
for(int i = 1; i <= 42; i++)
{
if(i <= dayOfWeek || i > daysInMonth + dayOfWeek)
daysInMonthArray.add(null);
else
daysInMonthArray.add(LocalDate.of(selectedDate.getYear(),selectedDate.getMonth(),i - dayOfWeek));
}
return daysInMonthArray;
}
这里我有使用方法来设置月份视图MainActivity.java
:
private void setMonthView() {
monthYearText.setText(monthYearFromDate(CalendarUtils.selectedDate));
ArrayList<LocalDate> daysInMonth = daysInMonthArray(CalendarUtils.selectedDate);
CalAdapter calAdapter = new CalAdapter(daysInMonth, this);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 7);
calendarRecyclerView.setLayoutManager(layoutManager);
calendarRecyclerView.setAdapter(calAdapter);
}
我附上了两张图片:一张是我的输出,另一张是样本输出,即我想要实现的目标。
我已经厌倦了将活动的日期设定为2021年8月15日,即onBindViewHolder
:-
String date1 = "14/07/2021";
holder.event.setText("90% good"+date.format(DateTimeFormatter.ofPattern(date1)));
但得到的错误是:试图调用虚拟方法的java。字符串java。时间LocalDate。格式化(java.time.format.DateTimeFormatter)在空对象引用上
我真的需要帮助请...
您可以自定义视图持有人布局以显示事件。如果那天有任何事件,显示它,否则,设置为事件视图可见性。
为此,您可以传递包含日期和事件的自定义类的ArrayList,例如MyDate的ArrayList,而不是将LocalDate的ArrayList传递给适配器:
class MyDate {
LocalDate date;
MyEvent event;
}
class MyEvent {
String title;
...
}
MyDate类应该从数据库或任何其他方式填充。
在onbindview中,用户可以使用它来显示事件:
ArrayList<MyDate> myDates; // instead of ArrayList<LocalDate> daysOfMonth;
public void onBindViewHolder(@NonNull CalViewHolder holder, int position) {
final MyDate myDate = myDates.get(position);
if (myDate == null) {
holder.dayOfMonth.setText("");
holder.eventTextView.setText("");
} else {
// set date
holder.dayOfMonth.setText(String.valueOf(myDate.date.getDayOfMonth()));
//set background color
if (myDate.date.equals(CalendarUtils.selectedDate)) {
holder.parentView.setBackgroundColor(Color.BLUE);
}
//set event
if (myDate.event != null) {
holder.eventTextView.setText(myDate.event.title);
holder.eventTextView.setVisibility(View.VISIBLE);
} else {
holder.eventTextView.setVisibility(View.GONE);
}
}
}
我正在构建一个简单的日程表应用程序,并使用日历视图添加了一个日历。我想在一些特定的日期中添加事件作为假日,并用红色标记它们(只是日期是红色的)。每个星期六和星期天都会是红色的,其他日子也会是红色的。所以,基本上我要问的是,如何制作一个只有开发者才能更改的事件日历。我是android studio的初学者,请尝试用最简单的方式回答。
我想显示一个日历,其中包含在日期上使用不同颜色的事件,类似于默认日历应用程序。但是我在默认日历视图中没有看到任何这样的API。 有人能告诉我正确的方向吗?如何进行?我应该扩展默认日历并添加自己的功能吗?或者我应该使用带有PageViewer和片段的5x5文本框吗?
我在我的项目中实现了一个calendarview,我可以获取月份、月份和年份,但我找不到任何方法来获取星期几,我的代码是这样的: 当我在日历中选择一天时,我需要得到一周的时间,我试图得到答案,但我找不到。 对不起我的英语。
我需要一个Android日历视图像附上的照片。我已经尝试使用这个库https://github.com/alamkanak/android-week-view作为日历视图。这是一个固定的静态事件在日历添加仅。无法在此库日历视图中添加动态事件。有没有人可以推荐任何一个自定义库在Android。 日历视图库代码示例Android-Week-View: 我在这个图书馆所尝试的: 注: 我需要在此日历视图
我用的是完整的日历。这里我的问题是在点击prev按钮或next按钮点击功能时,如何在月视图、周视图或日视图中找到fullcalendar is的格式。这里正在为next和prev按钮调用自定义代码。因为我想用它激发一些自定义数据。基于fullcalendar视图。 在这里我想找到完整日历的视图,以月、周或日为单位 在这里我想找到完整日历的视图,以月、周或日为单位
在最近的谷歌日历应用程序中,它有一个日历,可以下拉显示,并以如下方式显示: 我想建立一个日历这样的应用程序,但当我把android API的应用程序,它的风格是非常不同的: 所以,问题是我如何才能样式/自定义日历视图像谷歌日历应用程序中的一个? 此外,对于谷歌日历应用程序的日历,当颗粒物上出现事件时,日期文本下会出现“小点”(如上面谷歌日历图像中的8月19日和21日)。当我有一个日期列表(不是An