One if my methods, nextMonthAction() in my fragment activity won't run and I'm not sure why. I get the following error in my logcat: Could not find method previousMonthAction(View) in a parent or ancestor. This is odd as that method is implemented as you can see below.
CalendarFragment Activity file:
// public class CalendarFragment extends Fragment {
// @Override
// public void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// Intent intent = new Intent(getActivity(), CalendarActivity.class);
// startActivity(intent);
// }
public class CalendarFragment extends Fragment implements CalendarAdapter.OnItemListener{
private TextView monthYearText;
private RecyclerView calendarRecyclerView;
private LocalDate selectedDate;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_calendar, container, false);
// Inflate the layout for this fragment
return view;
}
@Override
public void onStart() {
super.onStart();
initWidgets();
selectedDate = LocalDate.now();
setMonthView();
}
private void initWidgets() {
calendarRecyclerView = getActivity().findViewById(R.id.calendarRecyclerView);
monthYearText = getActivity().findViewById(R.id.monthYearTV);
}
@Override
public void onItemClick(int position, String dayText) {
if(!dayText.equals("")) {
String message = "Selected Date " + dayText + " " + monthYearFromDate(selectedDate);
}
}
private ArrayList<String> daysInMonthArray(LocalDate date) {
ArrayList<String> daysInMonthArray = new ArrayList<>();
YearMonth yearMonth = YearMonth.from(date);
int daysInMonth = yearMonth.lengthOfMonth();
LocalDate firstOfMonth = selectedDate.withDayOfMonth(1);
int dayOfWeek = firstOfMonth.getDayOfWeek().getValue();
for(int i = 1; i <= 42; i++) {
if(i <= dayOfWeek || i > daysInMonth + dayOfWeek) {
daysInMonthArray.add("");
}
else {
daysInMonthArray.add(String.valueOf(i - dayOfWeek));
}
}
return daysInMonthArray;
}
private String monthYearFromDate(LocalDate date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM yyyy");
return date.format(formatter);
}
public void previousMonthAction (View view) {
selectedDate = selectedDate.minusMonths(1);
setMonthView();
}
public void nextMonthAction(View view) {
selectedDate = selectedDate.plusMonths(1);
setMonthView();
}
@Override
public void setMonthView() {
monthYearText.setText(monthYearFromDate(selectedDate));
ArrayList<String> daysInMonth = daysInMonthArray(selectedDate);
CalendarAdapter calendarAdapter = new CalendarAdapter(daysInMonth, this);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity().getApplicationContext(), 7);
calendarRecyclerView.setLayoutManager(layoutManager);
calendarRecyclerView.setAdapter(calendarAdapter);
}
}
Logcat:
java.lang.IllegalStateException: Could not find method previousMonthAction(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatButton
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:479)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:437)
at android.view.View.performClick(View.java:8160)
at android.widget.TextView.performClick(TextView.java:16222)
at android.view.View.performClickInternal(View.java:8137)
at android.view.View.access$3700(View.java:888)
at android.view.View$PerformClick.run(View.java:30236)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8615)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)