【发布时间】:2014-02-01 07:36:12
【问题描述】:
我正在使用内置的导航抽屉来运行我的应用程序。我不太清楚如何处理后退按钮。当它被按下时,我希望它再次加载第一个片段。片段1。
因此,当应用启动时,您会看到 Fragment1 启动。然后,他们可以单击片段 2-5 转到其他页面。在所有这些页面中,我希望后退按钮将用户带回 Fragment1。用户应该能够通过返回按钮退出应用程序的唯一位置是 Fragment1。
因为这一切都是由 FragmentActivity 处理的,所以我试着在那里弄乱后退按钮。但是,我不断收到强制关闭错误:
(01-11 14:09:33.114: E/AndroidRuntime(8292): android.view.InflateException: Binary XML file line #7: Error inflating class fragment)
这是我目前所拥有的:
我已确保将片段添加到后台堆栈,如下所示:
fm.beginTransaction().replace(R.id.main, newFragment).addToBackStack("fragBack").commit();
返回按钮:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().findFragmentByTag("fragBack") != null) {
}
else {
super.onBackPressed();
return;
}
if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_LONG).show();
Fragment frag = getSupportFragmentManager().findFragmentByTag("fragBack");
FragmentTransaction transac = getSupportFragmentManager().beginTransaction().remove(frag);
transac.commit();
}
}
有人知道我需要做什么吗?我是否需要在每个片段(如果可能的话)中调用 onBackPressed 而不是控制抽屉的 FragmentActivity ?在我过去的应用程序中,无论用户在哪个 Fragment 上,我都可以使用后退按钮关闭应用程序,但我现在正在制作的那个我希望后退按钮返回到 Fragment1。
非常感谢您的帮助,谢谢。
onItemClick
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Fragment newFragment = new MapsPage();
FragmentManager fm = getSupportFragmentManager();
switch(i) {
case 0:
newFragment = new Fragment2();
break;
case 1:
newFragment = new Fragment3();
break;
case 2:
newFragment = new Fragment4();
break;
case 3:
newFragment = new Fragment5();
break;
}
fm.beginTransaction().add(R.id.main, newFragment).addToBackStack("fragback").commit();
drawerLayout.closeDrawer(rl);
}
【问题讨论】:
-
它应该可以在不向 onBackkeypressed 添加任何代码的情况下工作。您遇到的与布局相关的错误您也可以发布您的布局吗?
-
真的吗?在我所有的导航抽屉中,后退按钮总是退出应用程序。无论用户选择继续使用什么 Fragment。我的布局中有自定义插件,但它是标准布局,我不认为这是我的问题,但我会发布它。
-
在提交之前,您需要在
FragmentTrasaction中使用addToBackStack()方法(您正在这样做)。你不需要做更多的事情,后退按钮就可以带你回到上一个片段 -
vipul也是对的,你得到的错误是你的布局文件有问题
-
是的,只需在提交之前将 Fragment1 添加到 backstack,无论用户在哪个 Fragment 上,按下后退按钮都会将他带到 Fragment1。还要确保不要将其他 Fragments 添加到 backstack
标签: android android-fragments android-fragmentactivity navigation-drawer