я в настоящее время создания приложения для Android (14 < = SDK < = 21), используя один ActionBarActivity
и более Fragments
, такие как ListFragment
и MapFragment
, которые выгружены в рамках одного FrameLayout
вид.Фрагмент addToBackStack() и popBackStackImmediate() не работает
ActionBarActivity автоматически заменяет/фиксирует фрагмент A. Затем, когда пользователь нажимает кнопку, хостинговая деятельность заменяет/фиксирует новый другой фрагмент 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, я не могу вернуться к фрагменту А. MainActivity непосредственно закрыт. Тем не менее я старался самостоятельно управлять задним стеклом. Я вижу, что фрагмент находится в стеке, но если я вызываю popBackStackImmediate()
, фрагмент A выскочит и транзакция фрагмента не будет выполнена. (Первый назад пресса ничего не произойдет, вторая активность закрыта)
Я придаю также FragmentManager LogCat:
http://pastebin.com/hFLHprL8
Спасибо. Интересно, почему в документации по Android нет упоминания об этой важной вещи? Или я просто пропустил это ... – Ryde