我已经实现了一个'NavigationView',它有一些菜单选项,当用户选择一个时,它会将“主片段”视图更改为其他... 我的问题是,我想当用户按下后退按钮时,除非他在“主片段”上,否则屏幕返回“主片段”,否则关闭应用程序(当没有时,常规onBackPressed()行为活动或backStack)。 到目前为止我做了什么:
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.debitsNavId:
getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment_container, new MainFragment(), "main_fragment").commit();
break;
case R.id.friendsNavId:
getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment_container, new FriendFragment(), "friend_fragment").commit();
break;
case R.id.notificationsNavId:
getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment_container, new RequestFragment(), "request_fragment").commit();
break;
case R.id.configurationsNavId:
Intent i = new Intent(MainActivity.this,
SettingsActivity.class);
startActivity(i);
break;
case R.id.logoutNavId:
logout();
break;
default:
return false;
}
menuItem.setChecked(true);
drawer_layout.closeDrawers();
return false;
}
问题是,如果用户从'FriendFragment'导航到'RequestFragment'或反之亦然,那么获得“backstacked”的片段就是前一个(FriendFragment或RequestFragment),我还想“ MainFragment”。
我怎样才能做到这一点?
希望我自己清楚并感谢你的时间!
答案 0 :(得分:1)
所以基本上你需要做的是当MainFrag可见时将boolean设置为true,如果你导航,则将其设置为false。
然后在主活动中覆盖onBackPressed,如下面的方法:
@Override
public void onBackPressed() {
if (!isMainFragVisible) {
getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment_container, new MainFragment(), "main_fragment").commit();
}
}
您可以在此方法中将isMainFragVisible设置为true:
case R.id.debitsNavId:
getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment_container, new MainFragment(), "main_fragment").commit();
isMainFragVisible = true
break;
并在任何其他导航方法中将其设置为false。
答案 1 :(得分:0)
这样做
getSupportFragmentManager().beginTransaction().addToBackStack(fragment.getClass().getSimpleName()).replace(R.id.main_fragment_container, new MainFragment(), "main_fragment").commit();