В настоящее время я создаю приложение для 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 выскочит и транзакция фрагмента не будет выполнена. (первая обратная печать ничего не происходит, вторая активность закрыта)
Я также прикрепляю logcat FragmentManager:
http://pastebin.com/hFLHprL8