2016-07-29 8 views
0

Das folgende ist mein Code für meinen KalenderWarum funktioniert der Kalender in der Navigationsschublade nicht?

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; 
} 

} 

Es ist ein Fehler in dem getApplicationContext(), und die folgende ist der Code auf MainActivity.java, im Versuch, ein Fragment zu schaffen, um ein zu öffnen Kalender von einer Navigationsleiste

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; 
     } 
    }); 

ich habe eine neue xML-Datei für den Kalender zu erstellt, und ist mit Frame-Layout im Haupt 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> 

Antwort

1

Es gibt keine Methode getApplicationContext() in Fragmente. Wenn Sie Zugriff auf den lokalen Kontext erhalten möchten, schreiben Sie getActivity() anstelle von getApplicationContext().

+0

nein, es funktioniert nicht, ich denke, es aufgrund der Behälter sein kann, oder das Rahmenlayout, könnten Sie den Code anschauen bitte – Mohendra

+0

Welche Fehler haben reveive Sie? –

+0

nicht genau Fehler, es ist nur, dass, wenn ich auf den Kalender in der Navigationsleiste klicken, tut es nichts – Mohendra

0

Versuchen

getActivity().getApplicationContext()

statt nur getApplicationContext().

Hoffe, es hilft :)

+0

Ich habe versucht, aber nichts öffnet, die Anwendung läuft, aber nichts öffnet, wenn ich auf die Schaltfläche klicken – Mohendra

+0

Try - Toast.makeText (getActivity(), Tag + "/" + Monat + "/" + Jahr, Toast.LENGTH_LONG) .show(); – Neo

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

Änderung es

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

zu verstehen, warum die Änderung erforderlich ist, ist hier die answer.

0

Überschreiben Sie die Fragmentmethode onAttach, und speichern Sie die Aktivitätsreferenz für die gesamte Fragmentklasse.

public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    mActivity = activity; 
}