0

The following is my code for my Calendar

public class Calender extends android.support.v4.app.Fragment {
CalendarView calendar;
public Calender() {
    // Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)  {
    super.onCreate(savedInstanceState);
   View fragmentRootView = inflater.inflate(R.layout.fragment_calender, container, false);

    calendar = (CalendarView) fragmentRootView.findViewById(R.id.calendar);
    calendar.setShowWeekNumber(false);
    calendar.setFirstDayOfWeek(2);
    calendar.setSelectedWeekBackgroundColor(getResources().getColor(R.color.green));
    calendar.setUnfocusedMonthDateColor(getResources().getColor(R.color.transparent));
    calendar.setWeekSeparatorLineColor(getResources().getColor(R.color.transparent));
    calendar.setSelectedDateVerticalBar(R.color.darkgreen);
    calendar.setOnDateChangeListener(new OnDateChangeListener() {
        @Override
        public void onSelectedDayChange(CalendarView view, int year, int month, int day) {
            Toast.makeText(getApplicationContext(), day + "/" + month + "/" + year, Toast.LENGTH_LONG).show();
        }
    });

    return fragmentRootView;
}

}

There is an error in the getApplicationContext() , and the following is the code on MainActivity.java, im trying to create a fragment in order to open a calendar from a navigation drawer

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            switch (item.getItemId())
            {
                case R.id.calendar:
                    fragmentTransaction = getSupportFragmentManager().beginTransaction();
                    fragmentTransaction.replace(R.id.main_container,  new Calender());
                    fragmentTransaction.commit();
                    getSupportActionBar().setTitle("Calender");
                    item.setChecked(true);
                    break;
               // drawer.closeDrawers();

            }
            return true;
        }
    });

I have created a new xml file for the calendar too, and am using frame layout in the main xml.

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:background="@color/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        app:tabGravity="fill"
        app:tabIndicatorColor="@color/colorAccent"
        app:tabSelectedTextColor="@color/tabTextColor"
        app:tabTextColor="#FFF">

    </android.support.design.widget.TabLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_below="@+id/tab_layout">



    </android.support.v4.view.ViewPager>

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/lvPump"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/tab_layout" />




</RelativeLayout>
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/main_container"></FrameLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/navigation_header"
    app:menu="@menu/navigation_item">

</android.support.design.widget.NavigationView>

Mohendra
  • 161
  • 1
  • 7

4 Answers4

1

There is no method getApplicationContext() in Fragment. If you want to get access to local context, write getActivity() instead of getApplicationContext().

Michael Spitsin
  • 2,539
  • 2
  • 19
  • 29
  • no it is not working, i think it may be due to the container, or the frame layout, could you please look at the code – Mohendra Jul 29 '16 at 09:16
  • not exactly error, its just that when i click on calendar in the navigation drawer, it does absolutely nothing – Mohendra Jul 29 '16 at 09:23
0

Try

getActivity().getApplicationContext()

instead of only getApplicationContext().

Hope it will help :)

Neo
  • 3,546
  • 1
  • 24
  • 31
  • i tried that, but nothing opens, the application runs but nothing opens when i click on the button – Mohendra Jul 29 '16 at 09:23
  • Try - Toast.makeText(getActivity(), day + "/" + month + "/" + year, Toast.LENGTH_LONG).show(); – Neo Jul 29 '16 at 09:43
0
Toast.makeText(getApplicationContext(), day + "/" + month + "/" + year, Toast.LENGTH_LONG).show();

change it to

Toast.makeText(getActivity().getApplicationContext(), day + "/" + month + "/" + year, Toast.LENGTH_LONG).show();

to understand why the change is needed, here is the answer.

Community
  • 1
  • 1
ARKhan
  • 297
  • 1
  • 9
0

Override the fragment method onAttach and store the activity reference to use in entire fragment class.

public void onAttach(Activity activity) {
    super.onAttach(activity);
    mActivity = activity;
}
Vora Ankit
  • 682
  • 5
  • 8