我有一个只有一个活动和几个片段的导航抽屉。 我的主要片段非常重,所以我试着将它保存在记忆中,因为如果我不这样做,抽屉在我使用它时会很迟钝。
为此,我有这样的布局:
<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片段在彼此之上)并且主片段根本不显示。
奖金问题:这是正确的做事方式吗?我的意思是避免抽屉滞后或者我应该完全改变我的实施方式吗?
感谢。
答案 0 :(得分:0)
嗯,这应该是一个评论,但由于我无法发表评论,我必须回答。
原因可能是碎片不能正确地或按顺序进入后台。
我曾创建过一个项目,其中我使用带有片段的导航抽屉。如果我理解正确,你想要的是去最后一个打开的片段。
尝试使用以下代码:将其放入onBackPressed()
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
} else {
getFragmentManager().popBackStack();
}
}
基本上,您正在弹出添加到Backstack中的最后一个片段。