我想通过按后退按钮返回另一个片段。我已经读过,addToBackStack (String tag)
应该会有所帮助,但它确实没有用。
这是切换片段时我正在做的事情。
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.content_frame, new MainFragment());
ft.addToBackStack("Mainfragment");
ft.commit();
现在,片段打开,并启动AsyncTask
,其中会出现加载圈。加载后,显示数据。当我现在按下后退按钮一次时,片段将返回创建加载圆的AsyncTask
的开头。但AsyncTask
不会继续。当我再次按下后退按钮时,应用程序将关闭。
我试图添加onBackPressed
,但它只是告诉我,这在片段中不起作用。什么是最好的方式去这里?
编辑以澄清: 没有错误。它只是不起作用。就像我甚至没有行addToBackStack -
答案 0 :(得分:3)
之前我遇到过同样的情况,我最终得到了这个解决方案。添加或替换Fragments时,需要使用唯一名称将其添加到backStack。然后当按下后退按钮时,您可以在创建片段的FragmentActivity中使用下面的方法查看哪个片段是活动片段。
private String getCurrentFragmentName() {
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
String fragmentName;
if (backStackEntryCount > 0) {
fragmentName = getSupportFragmentManager().getBackStackEntryAt(backStackEntryCount - 1).getName();
} else {
fragmentName = "";
}
return fragmentName;
}
并在onKeyDown()方法中执行以下操作。
if (keyCode == KeyEvent.KEYCODE_BACK && getCurrentFragmentName().equals("your fragment name")) {
// Handle back press for this case.
return true;
} else if (keyCode == KeyEvent.KEYCODE_BACK
&& getCurrentFragmentName().equals("your another fragment")) {
// Handle back press for another Fragment
return true;
} else {
return super.onKeyDown(keyCode, event);
}
这就是我如何使用backStack添加Fragment
transaction.addToBackStack("Your Fragment Name");