我正在使用内置导航抽屉来运行我的应用程序。我无法完全弄清楚如何处理返回按钮。当按下返回按钮时,我希望它再次加载第一个片段。片段1。
因此,当应用程序启动时,您会看到Fragment1启动。然后他们可以点击Fragment 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吗?在我以前的应用程序中,无论用户在哪个片段上,返回按钮都可以关闭应用程序,但我现在制作的这个应用程序中,我希望返回按钮返回到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);
}
FragmentTransaction
之前使用方法addToBackStack()
(这是你已经做的)。你不需要再做任何事情,就可以通过返回按钮回到上一个片段。 - Dreagen