我目前正在构建一个Android应用程序(14 <= SDK <= 21),使用一个ActionBarActivity
和更多的Fragments
(例如ListFragment
和MapFragment
),它们在单个FrameLayout
视图中进行切换。
ActionBarActivity
会自动替换/提交片段A。当用户点击按钮时,托管Activity会替换/提交一个新的不同片段B。我的目标是让用户在按下后退按钮时立即返回到片段A。
现在是一些代码。
MainActivity
public class MainActivity extends ActionBarActivity implements StopFragment.OnFragmentInteractionListener,
StopItemFragment.OnFragmentInteractionListener {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getFragmentManager();
fragmentManager.enableDebugLogging(true);
...
if (fragmentManager.findFragmentById(R.id.content_frame) == null) {
StopItemFragment list = StopItemFragment.newInstance(null); //A - extends ListFragment
fragmentManager.beginTransaction()
.replace(R.id.content_frame, list)
.addToBackStack(null)
.commit();
}
...
@Override
public void onFragmentInteraction(String id) {
selectItem(Integer.parseInt(id));
}
private void selectItem(int position) {
StopFragment fragment = StopFragment.newInstance(null, null); //B - extends Fragment
...
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
...
}
}
问题
即使调用了addToBackStack()
,但当我在片段B时,我无法返回到片段A。MainActivity直接关闭。
尽管我尝试自己管理返回栈,但没有成功。我可以看到片段已经在堆栈中,但如果我调用popBackStackImmediate()
,片段A会弹出,并且片段事务不会执行。(第一次按下返回键没反应,第二次才关闭活动)
我还附上了FragmentManager的logcat日志:
http://pastebin.com/hFLHprL8