2017-02-07 1 views
0

Ich habe ein Navigationsfach, das aus n Menüs besteht, wenn ich auf das Menü klicke, das ich zum Öffnen eines bestimmten Fragments benötige. Zuerst habe ich es mit Aktivitäten und Absichten versucht. Es sieht nicht gut aus, wenn Fragmente verwendet werden. Ich wähle sie nach ID aus und rufe das Fragment von einer Aktivität auf. In dem Fragment verwende ich Kreisdiagramme, in denen es Nullzeigerausnahmen wirft. Ich habe versucht, die Get-Ansicht zu ändern, da sie erst nach Oncreate View eingefügt wird. aber keine Ergebnisse.Aufruf eines Fragments aus dem Navigationsfach

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    pieChart1 = (PieChart) getView().findViewById(R.id.piechart1); 
    pieChart2 = (PieChart) getView().findViewById(R.id.piechart2); 
+0

hast du irgendeine Ansicht hinzugefügt? –

Antwort

0

Hier ist ein Beispielcode, der Ihnen hilft, zu verstehen.

FragmentManager fm = getFragmentManager(); 
     fm.beginTransaction().replace(R.id.content_frame, new HomeFragment()).commit(); 

Dann ersetzen Sie diese HomeFragment mit anderen in onNavigationItemSelected(): zuerst die activity_main.xml Inhalte mit einem Fragment in OnCreate() ersetzen

@Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_home) { 
     // Handle the camera action 
     FragmentManager fm = getFragmentManager(); 
     fm.beginTransaction().replace(R.id.content_frame, new HomeFragment()).commit(); 
    } else if (id == R.id.nav_current_order) { 
     FragmentManager fm = getFragmentManager(); 
     fm.beginTransaction().replace(R.id.content_frame, new MyCurrentOrderFragment(),"Tag").commit(); 
    } else if (id == R.id.nav_received_images) { 
     FragmentManager fm = getFragmentManager(); 
     fm.beginTransaction().replace(R.id.content_frame, new HistoryFragment()).commit(); 
    } else if (id == R.id.nav_rate_app) { 
     FragmentManager fm = getFragmentManager(); 
     fm.beginTransaction().replace(R.id.content_frame, new RateOurAppFragment()).commit(); 
    } else if (id == R.id.nav_help) { 
     FragmentManager fm = getFragmentManager(); 
     fm.beginTransaction().replace(R.id.content_frame, new HelpFragment()).commit(); 
    } else if (id == R.id.nav_settings) { 
     FragmentManager fm = getFragmentManager(); 
     fm.beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit(); 
    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

eine FrameLayout in Ihrem content_main.xml hinzufügen und setze die ID auf "content_frame"

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="bd.com.chalo.dsstudio.MainActivity" 
    tools:showIn="@layout/app_bar_main"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!" 
    android:visibility="gone" /> 
<FrameLayout 
    android:id="@+id/content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"></FrameLayout> 

</RelativeLayout> 
+0

Ya thanks, Der Wechsel zu Fragment funktioniert Ich denke, es zeigt nur Null Zeiger Ausnahme auf dieser Zeile pieChart1 = (PieChart) getView(). FindViewById (R.id.piechart1); pieChart2 = (PieChart) getView(). FindViewById (R.id.piechart2); ' –

+0

In welcher Zeile? Ist meine Antwort hilfreich? Wenn es dann ist, markieren Sie es bitte als akzeptiert. :) – tahsinRupam

+0

fm.beginTransaction(). Replace (R.id.content_frame, new SettingsFragment()). Commit(); In dieser Zeile in content_frame, wo wir das Layout geben sollten, kann ich mein Layout nicht hinzufügen –

Verwandte Themen