导航抽屉与片段和背面按下

时间:2015-04-15 13:04:19

标签: android android-fragments navigation-drawer onbackpressed

我有一个只有一个活动和几个片段的导航抽屉。 我的主要片段非常重,所以我试着将它保存在记忆中,因为如果我不这样做,抽屉在我使用它时会很迟钝。

为此,我有这样的布局:

<RelativeLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</RelativeLayout>

<fragment
    android:id="@+id/main_fragment"
    android:name=".MainFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

他们在同一个地方,但在代码中我用较轻的片段替换片段布局并显示/隐藏主片段。 这是一个showFragment方法,当我点击抽屉中的项目时调用它。

case 0: //Light Fragment
    fragment = getSupportFragmentManager().findFragmentByTag("light");
    if (fragment == null) {
        fragment = ProfileFragment.newInstance();
    }
    getSupportFragmentManager().beginTransaction().hide(getSupportFragmentManager().findFragmentById(R.id.main_fragment)).commit();
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, "light").addToBackStack(null).commit();
break;
case 1: //Heavy Frag
    if (getActiveFragment() != null) {
        getSupportFragmentManager().beginTransaction().remove(getActiveFragment()).commit();
    }
    getSupportFragmentManager().beginTransaction().show(getSupportFragmentManager().findFragmentById(R.id.main_fragment)).addToBackStack(null).commit();
break;

除非按下后退按钮,否则工作正常。我尝试了onBackPressed的许多实现,但我总是最终显示它应该被隐藏的主要片段(So 2片段在彼此之上)并且主片段根本不显示。

奖金问题:这是正确的做事方式吗?我的意思是避免抽屉滞后或者我应该完全改变我的实施方式吗?

感谢。

1 个答案:

答案 0 :(得分:0)

嗯,这应该是一个评论,但由于我无法发表评论,我必须回答。

原因可能是碎片不能正确地或按顺序进入后台。

我曾创建过一个项目,其中我使用带有片段的导航抽屉。如果我理解正确,你想要的是去最后一个打开的片段。

尝试使用以下代码:将其放入onBackPressed()

    @Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 0) {
    this.finish();
} else {
    getFragmentManager().popBackStack();
}
}

基本上,您正在弹出添加到Backstack中的最后一个片段。