3

Ich habe ein Navigationsmenüfragment für meine Anwendung erstellt, damit ich es für alle meine Aktivitäten verwenden kann. Allerdings, wenn ich die App ausführen, funktioniert das Menü nicht, weder wenn ich auf das Hamburger-Symbol klicke, noch wenn ich von links nach rechts ziehe. Also entschied ich mich, den Debugger zu verwenden, und ich fand heraus, dass keine Layout-Komponenten meines Fragments in der Klasse des Fragments initialisiert werden. Kannst du mir helfen herauszufinden, warum das passiert und wie ich es beheben kann? Hier ist meine fragment.java Klasse und meine fragment_layout.xml Datei:Navigationsmenü Fragment kann die Komponenten seines Layouts nicht initialisieren

Fragment.java:

public class NavMenuFragment extends Fragment { 

// NavMenu member vars 
private DrawerLayout mDrawerLayout; 
private NavigationView navigationView; 
private ActionBarDrawerToggle mToggle; // Button for toggling the side menu 

// Keeps the position of the previously selected menu item(0 : Home) 
int position = 0; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_nav_menu,null); 
    mDrawerLayout = view.findViewById(R.id.drawerLayout); 
    navigationView = view.findViewById(R.id.nav_view); 
    mToggle = new ActionBarDrawerToggle(getActivity(),mDrawerLayout,R.string.drawer_open,R.string.drawer_closed); // Instantiating our button 
    return view; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    // Sets the default selected menu item, to the Home item 
    navigationView.getMenu().findItem(R.id.nav_home).setChecked(true); 

    // Used to help on check and uncheck menu items when the user clicks on them 
    final List<MenuItem> items = new ArrayList<>(); 
    Menu menu; 
    menu = navigationView.getMenu(); 

    // Fill the list with all the menu items 
    for(int i=0; i<menu.size();i++) { 
     items.add(menu.getItem(i)); 
    } 

    Toast.makeText(getActivity(), "size:" + items.size(), Toast.LENGTH_SHORT).show(); 

    // When an item inside the NavView gets clicked, then handle the event... 
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 

      switch (item.getItemId()) { 
       case R.id.nav_home: 
        mDrawerLayout.closeDrawer(Gravity.START); 
        break; 
       case R.id.nav_UserBoxGLB: 
        break; 
       case R.id.nav_UserBoxJP: 
        break; 
       case R.id.nav_settings: 
        break; 
       case R.id.nav_feedback: 
        break; 
       case R.id.nav_contact_us: 
        break; 
       case R.id.nav_donate: 
        // Open the website's URL in a browser window 
        Intent intent = new Intent(); 
        intent.setAction(Intent.ACTION_VIEW); 
        intent.addCategory(Intent.CATEGORY_BROWSABLE); 
        intent.setData(Uri.parse("http://www.google.com")); 
        startActivity(intent); 
        break; 
       case R.id.nav_about: 
        break; 
       default: 
        return onNavigationItemSelected(item); 
      } 
      items.get(position).setChecked(false); 
      item.setChecked(true); 
      mDrawerLayout.closeDrawers(); 
      return false; 
     } 
    }); 

    mDrawerLayout.addDrawerListener(mToggle); 
    // Set the hamburger icon's color 
    mToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.NavActionBarTextColor)); 
    mToggle.syncState(); 
} 

// When an item from the Action Bar gets tapped, then... 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    return mToggle.onOptionsItemSelected(item) || onOptionsItemSelected(item); 
} 
} 

Fragment_layout.xml:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_gravity="left" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorPrimary" 
    android:id="@+id/drawerLayout"> 

    <!-- The actual side menu Nav View --> 
    <android.support.design.widget.NavigationView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:headerLayout="@layout/navigation_header" 
     app:menu="@menu/navigation_menu" 
     android:id="@+id/nav_view"> 

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

</android.support.v4.widget.DrawerLayout> 

Antwort

2

Sie tun es falsch
Wenn Sie möchten, Verwenden Sie die gleiche Navigationsleiste für alle Fragmente.
Sie können in Ihrer Hauptaktivität eine Navigationsleiste erstellen und das Fragment aus dieser Navigationsleiste öffnen.
Hier ist die tutorial

+0

Zunächst hatte ich die Navigationsschublade in meiner Hauptaktivität erstellt, aber dann geändert. Ich kann es wieder in die Hauptaktivität einfügen, aber ich möchte, dass ich dieselbe Navigationsleiste für jede andere Aktivität in meiner Anwendung verwenden kann, aber nur für die Navigationsleiste keine andere Ansicht von meiner Hauptaktivität. –

+0

tha'ts, was ich sage, machen Navigation Schublade in der Haupttätigkeit und dann wird es eine Hauptnavigation Schublade für Ihre Fragmente handeln –

+0

ok ich denke, ich bekomme die Lösung, vielen Dank! –

Verwandte Themen