2017-08-03 3 views
0

Ich habe eine App mit BottomNavigation (3 Elemente). Das Element 1 lädt Fragment 1, Element 2 lädt Fragment 2 und Element 3 lädt Fragment 3. Wenn ein Element in der BottomNavigation ausgewählt wird, bleibt die Ansicht dieses Elements blau und der Text ist größer. Ich habe onBackPressed implementiert, dafür die Fragmenthistorie (BackStack). Aber wenn ich unterstütze, sind die Ansichten in BottomNavigation Stoppe. Also, wenn ich in Fragment 3 bin, und ich drücke die Zurück-Taste und zurück zu Fragment 2, zeigt die BottomNavigationView, dass ich in Fragment 3 bin, und wenn ich die Taste erneut drücke, gehe ich zu fragment1, aber die BottomNavigationView don Es wird nicht aktualisiert, es bleibt in Fragment 3. Die ScreenShorts zeigen, wovon ich rede. Sorry mein schlechtes Englisch und meine schlechte Erklärung.BottomNavigation Element Ausgewählte Animation onBackPressed

enter image description here

enter image description here

MainActivity.java

public class MainActivity extends AppCompatActivity { 

private TextView mTextMessage; 

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener 
     = new BottomNavigationView.OnNavigationItemSelectedListener() { 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     Fragment selectedFragment = null; 
     switch (item.getItemId()) { 
      case R.id.navigation_home: 
       selectedFragment = Fragment1.newInstance(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.content, selectedFragment).addToBackStack(null).commit(); 
       return true; 
      case R.id.navigation_dashboard: 
       selectedFragment = Frament2.newInstance(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.content, selectedFragment).addToBackStack(null).commit(); 
       return true; 
      case R.id.navigation_notifications: 
       selectedFragment = Fragment3.newInstance(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.content, selectedFragment).addToBackStack(null).commit(); 
       return true; 
     } 
     return false; 
    } 

}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); 
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); 
} 

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() > 0) { 
     getFragmentManager().popBackStack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 

Antwort

1

Vom Material Design guidelines for bottom navigation:

Auf Android, die Zurück-Taste navigieren nicht zwischen dem unteren Navigationsleiste Ansichten.

Und von dem Developer Training for Back Navigation:

Hinweis: Sie sollten keine Transaktionen auf die Rückseite Stapel hinzufügen, wenn die Transaktion für horizontale Navigation (wie beim Einschalten Tabs) Sie

ist also Verwenden Sie den Backstack beim Ersetzen von Fragmenten nicht basierend auf Benutzerinteraktion mit Ihrer BottomNavigationView.

Wenn Sie diese Richtlinien ignorieren, ist wahrscheinlich die Antwort in FragmentManager.OnBackStackChangedListener zu suchen und das entsprechende Navigationselement zu aktivieren, wenn Sie den Backstack öffnen.

+0

Entschuldigung für die Verzögerung zu antworten. Die Bastart ist also, wenn die Zurück-Taste gedrückt wird, wird immer zu Fragment 1 zurückgeschaltet? –

+0

@TonyStarkus gemäß den Richtlinien, sollte der Back Press tun, was auch immer der Systemstandard ist, und die untere Navigation und/oder Fragmente vollständig ignorieren. Wahrscheinlich würde es also deine Aktivität beenden. –