我有一个只有一个活动和几个片段的导航抽屉。我的主要片段加载起来真的很重,所以我尝试将它保存在内存中,因为如果我不这样做,抽屉在我使用它时会变得迟钝。
为此,我有这样的布局:
<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 个片段彼此重叠)而主要片段根本不显示。
额外的问题:这是正确的做事方式吗?我的意思是避免抽屉滞后还是我应该完全改变我的实现?
谢谢。