我有一个带有BottomNavigation的应用程序(3项)。项目1加载片段1,项目2加载片段2和项目3加载片段3.当在BottomNavigation中选择一个项目时,此项目的视图保持蓝色,文本更大。我已经实现了onBackPressed,因为它支持片段历史(BackStack)。但是,当我支持时,BottomNavigation中的观点是停止的。所以,如果我在片段3中,然后我按回按钮并将其返回到片段2,则BottomNavigationView显示我在片段3中,如果我再次按下后退按钮,我会转到fragment1,但是BottomNavigationView don不要更新,它会保留在片段3中。屏幕短片将显示我正在谈论的内容。 对不起我的英文不好和我的不好解释。
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();
}
}
答案 0 :(得分:1)
来自Material Design guidelines for bottom navigation:
在Android上,“后退”按钮不会在底部导航栏视图之间导航。
来自Developer Training for Back Navigation:
注意:当事务用于水平导航时(例如切换选项卡时),不应将事务添加到后台堆栈。
因此,在根据用户与BottomNavigationView
的互动替换片段时,不应使用后台堆栈。
如果您选择忽略这些指南,可能答案是查看FragmentManager.OnBackStackChangedListener
并在弹出后台堆栈时激活相应的导航项。