2016-12-12 6 views
0

Ich denke, es ist ein einfaches Problem, aber es macht mich am Kopf kratzen.Navigationsschublade Active State funktioniert nicht

Ich habe versucht, es funktionieren zu lassen, aber ich scheitere immer. Bitte ertragen Sie meine Frage.

Der aktive Status funktioniert nicht für Elemente im Menü Elemente> Menü.

Wenn ich den Artikel drücke. View funktioniert perfekt. Allerdings, wenn ich das Burgermenü drücke. Das Element verfügt nicht über den aktiven Status und das letzte Element mit dem aktiven Status ist weiterhin aktiv.

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_home" 
     android:icon="@drawable/menu_home" 
     android:title="Home" /> 
    <item 
     android:id="@+id/nav_game" 
     android:icon="@drawable/menu_account" 
     android:title="Game" /> 
    <item 
     android:id="@+id/nav_livechat" 
     android:icon="@drawable/menu_account" 
     android:title="Live Chat"/> 
</group> 

<item android:title="Transaction"> 
    <menu> 
     <item 
      android:id="@+id/nav_deposit" 
      android:icon="@drawable/menu_depwit" 
      android:title="Deposit" /> 

     <item 
      android:id="@+id/nav_withdraw" 
      android:icon="@drawable/menu_depwit" 
      android:title="Withdraw" /> 

     <item 
      android:id="@+id/nav_transfer" 
      android:icon="@drawable/menu_transfer" 
      android:title="Transfer" /> 
    </menu> 
</item> 

public boolean onNavigationItemSelected(MenuItem item) { 
    if (id == R.id.nav_home) { 
     HomeFragment homeFragment = new HomeFragment(); 
     FragmentManager manager = getSupportFragmentManager(); 
     manager.beginTransaction().replace(R.id.content_fragment, homeFragment, homeFragment.getTag()).commit(); 
    } else if() { 
     // and so on... 
    } 
} 

Jede Hilfe würde geschätzt.

+0

versuche addbackstack (null) hinzuzufügen; in Ihrer Fragment-Transaktion, und in der Host-Aktivität überschreiben navigationclickLiatener –

+0

Setzen Sie einfach item.setChecked (true); in jedem if, sonst wenn ..condition .AND android: checked = "true", setze es standardmäßig in menu.xml in item – Radhey

Antwort

0

Sie können

 MenuItem previousMenuItem; 
     public boolean onNavigationItemSelected(MenuItem item) { 
     if (previousMenuItem != null) { 
       previousMenuItem.setChecked(false); 
      } 
      item.setChecked(true); 
      previousMenuItem = item; 
     if (id == R.id.nav_home) { 
      HomeFragment homeFragment = new HomeFragment(); 
      FragmentManager manager = getSupportFragmentManager(); 
      manager.beginTransaction().replace(R.id.content_fragment, homeFragment, homeFragment.getTag()).commit(); 
     } else if() { 
      // and so on... 
     } 
    } 

keine perfekte Lösung, wie diese etwas tun, aber für mich gearbeitet ..

+0

Danke für die Mühe, aber dies gilt nicht für den vollen aktiven Zustand auf Item. Habe nicht den Hintergrund und das vorherige MenüItem funktioniert nicht. –

+0

@LaraBelle Was meinst du mit vollem aktiven Zustand? .Das previousMenuItem sollte eine globale Variable sein, damit dies funktioniert. –

+0

Entschuldigung, ich habe ein falsches Wort gewählt. Ich habe es nur gesagt, weil es nicht den Hintergrund hat. Es ist sehr schwer, Android-App zu entwickeln. :/ –

0

Hier ist ein Ausschnitt es versuchen, zu hoffen, dass es Ihnen helfen

werden
@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 

    if (!item.isChecked()) { 
     item.setChecked(true); 
    } 
    Bundle mBundle = new Bundle(); 
    switch (item.getItemId()) { 
     case R.id.nav_home: 
     // Your action goes here.... 
     break; 
    } 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 
+0

Was ist die Verwendung von mBundle? –

+0

@LaraBelle hast du meine bearbeitete Antwort versucht. ? –

+0

Wenn Sie einige Daten an ein anderes Fragment übergeben möchten, können Sie diese Daten im Bundle festlegen und dieses Paket dann als Argument übergeben, während Sie die Fragmenttransaktion verwenden, aber Sie brauchen es nicht, also ignorieren Sie diese Zeile ... – Bhavnik

Verwandte Themen