javaandroidcalendarview

Android Studio crash when I declare my CalenderView


A really simple application that has fragments, I am having an activity that holds a CalendarView that opens up from a side navigation drawer. When you open the "logs" fragment, it'll send you to the CalendarActivity for you to choose a date you want to log information on. However, the application crashes when you do this, I found out if you remove the line "logCalendar = (CalendarView) findViewById(R.id.logCalendar);" it won't crash, but obviously I now can't use the calendar to get a date.

Does anyone know why it's crashing, or any other solutions that provide the same solution to what I want to achieve.

Thanks.

CalendarActivity class

public class CalendarActivity extends AppCompatActivity {

    private static final String TAG = "CalendarActivity";

    private CalendarView logCalendar;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calendar);
        logCalendar = (CalendarView) findViewById(R.id.logCalendar);

        logCalendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
            @Override
            public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
                String date =  dayOfMonth + "/" + month +"/" + year;
                Log.d(TAG, "onSelectedDayChange: date:" + date);
            }
        });

    }
}

Class that opens the CalenderActivity class

    private TextView currentDate;
    private Button dateButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_logs, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {



        currentDate = (TextView) view.findViewById(R.id.currentDate);
        dateButton = (Button) view.findViewById(R.id.dateButton);

        Intent intent = new Intent(getActivity(), CalendarActivity.class);
        startActivity(intent);

        super.onViewCreated(view, savedInstanceState);
    }
}

My Logcat

2020-12-20 16:45:53.987 28316-28316/com.example.co3201weighttrainingapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.co3201weighttrainingapplication, PID: 28316
    java.lang.ClassCastException: com.applandeo.materialcalendarview.CalendarView cannot be cast to android.widget.CalendarView
        at com.example.co3201weighttrainingapplication.LogsFragment.onViewCreated(LogsFragment.java:48)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
        at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

Solution

  • the logcat you have posted explains the error itself. see this line :- java.lang.ClassCastException: com.applandeo.materialcalendarview.CalendarView cannot be cast to android.widget.CalendarView.

    It looks like you have imported android native calendarView instead of your material calendar view. Check your imports in your CalendarActivity class and you might find something like this :- import android.widget.CalendarView; remove that and change it to import com.applandeo.materialcalendarview.CalendarView;. I am assuming you are using applandeo material calendar view from this site.