返回到backPressed

时间:2015-06-09 11:28:55

标签: android android-fragments

我已经实现了一个'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”。

我怎样才能做到这一点?

希望我自己清楚并感谢你的时间!

2 个答案:

答案 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();