0

我有一个只有一个活动和几个片段的导航抽屉。我的主要片段加载起来真的很重,所以我尝试将它保存在内存中,因为如果我不这样做,抽屉在我使用它时会变得迟钝。

为此,我有这样的布局:

<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 的许多实现,但我总是以显示何时应该隐藏它的主要片段(因此 2 个片段彼此重叠)而主要片段根本不显示。

额外的问题:这是正确的做事方式吗?我的意思是避免抽屉滞后还是我应该完全改变我的实现?

谢谢。

4

1 回答 1

0

好吧,这应该更像是评论,但由于我无法评论,所以我必须回答。

原因可能是碎片没有正确进入后台堆栈或按应有的顺序进入后台。

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

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

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

本质上,您正在弹出添加到后台堆栈的最后一个片段。

于 2015-04-16T08:49:30.647 回答