2017-08-03 58 views
0

我有一个BottomNavigation(3项目)的应用程序。项目1载入片段1,项目2载入片段2和项目3载入片段3.当在BottomNavigation中选择一个项目时,该项目的视图保持蓝色并且文本更大。我实现了onBackPressed,因为它支持片段历史(BackStack)。但是,当我支持时,BottomNavigation中的视图是stoppe。所以,如果我在片段3中,并且按回按钮并且它返回到片段2,BottomNavigationView显示我在片段3中,并且如果我再次按下返回按钮,我将转到fragment1,但BottomNavigationView不会不会更新,它会保留在片段3中。屏幕快照将显示我在说什么。 对不起我的坏英语和我的不好解释。BottomNavigation项目Selected动画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(); 
    } 
} 

回答

1

Material Design guidelines for bottom navigation

在Android上,后退按钮不会底部导航栏视图之间进行导航。

而且从Developer Training for Back Navigation

注意:不要添加交易到后堆在事务的水平导航(例如,当切换标签)

所以你在基于用户与您的BottomNavigationView互动替换片段时,不应该使用后退堆栈。

如果您选择忽略这些指南,可能的答案是查看FragmentManager.OnBackStackChangedListener并在弹出后退堆栈时激活相应的导航项。

+0

对不起延迟回复。所以最简单的方法是当后退按钮被按下时,它总是会回到片段1?! –

+0

@TonyStarkus根据指导原则,后按应该做任何系统默认设置,并完全忽略底部导航和/或片段。所以可能会结束你的活动。 –