【发布时间】:2014-08-06 17:38:46
【问题描述】:
每次用户从抽屉菜单中点击一个项目时,我都会使用 DrawerLayout 并添加一个新的 Fragment。这完美无缺。
在其中一个fragments 中,用户可以导航到另一个片段:
private void loadArchives() {
PUCNewsArchive news_archive = new PUCNewsArchive();
getFragmentManager()
.beginTransaction()
.add(R.id.container_frame, news_archive, "news_archives")
.addToBackStack(null)
.commit();
}
这会正确地将另一个fragment 添加到堆栈中。但是,它不会将操作栏抽屉按钮/图标更改为后退按钮。因此,在轻敲时再次打开抽屉,这是不应该的。导航返回的唯一方法是使用硬件返回按钮,它确实返回到以前的fragment。我尝试将以下内容添加到我的主要Activity 以查看发生了什么:
@Override
public void onBackPressed(){
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
Log.i("MainActivity", "popping backstack");
fm.popBackStack();
} else {
Log.i("MainActivity", "nothing on backstack, calling super");
super.onBackPressed();
}
}
但这只有在我使用硬件后退按钮时才会调用,因为抽屉按钮只会打开抽屉。
我认为这应该检查它是否应该打开抽屉或导航:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch(item.getItemId()) {
case android.R.id.home:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
我错过了什么?为什么抽屉按钮永远不会变成后退按钮,也不会像一个后退按钮?
【问题讨论】:
-
@Spurdow 不,我在
onPostCreate中有那个。 -
@FrankN.Stein 我没有主要活动的孩子。我只有一个主要活动,然后是片段。所以不,我没有在清单中添加任何关于父活动的内容。
标签: android android-fragments navigation-drawer back-stack