【发布时间】:2017-10-03 16:20:44
【问题描述】:
我花了一整天的时间寻找答案,但没有找到适合这个问题的任何解决方案。
我正在寻找一种方法来创建类似于 Instagram 或 PlayKiosk 应用程序的底部导航用法。片段应该只被添加到后台堆栈一次。当按下后退按钮时,我希望应用程序跳回到访问过的最后一个 Fragment,并且 BottomNavigation 的按钮以适应该 Fragment。
目前我使用以下代码:
//BottomNavigationListener
private BottomNavigationView.OnNavigationItemSelectedListener buttonNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
FragmentManager fragmentManager = getSupportFragmentManager();
switch (item.getItemId()) {
case R.id.navigation_game:
currentFragment = GameFragment.newInstance();
fragmentManager.beginTransaction()
.addToBackStack(TAG_FRAGMENT_GAME)
.replace(R.id.content_frame, currentFragment, TAG_FRAGMENT_GAME)
.commit();
break;
case R.id.navigation_tournament:
currentFragment = TournamentFragment.newInstance();
fragmentManager.beginTransaction()
.addToBackStack(TAG_FRAGMENT_TOURNAMENT)
.replace(R.id.content_frame, currentFragment, TAG_FRAGMENT_TOURNAMENT)
.commit();
break;
case R.id.navigation_history:
break;
}
return true;
}
};
但这导致了一个问题,即我可以按几次底部导航按钮,每次点击都会实例化一个新的片段。此外,BottomNavigation 按钮也没有根据 Fragments 设置。
我找到了这个答案,但没有成功Prevent The Same Fragment From Stacking More Than Once ( addToBackStack)
【问题讨论】:
-
你可以处理 onBackPressed 方法吗?在打开时保留最后一个片段,当您按下返回按钮时,只需替换您访问的最后一个片段。