jestem aktualnie budowania aplikacji dla Androida (14 < = SDK < = 21) za pomocą jednego ActionBarActivity
i więcej Fragments
, takich jak ListFragment
i MapFragment
, które są wymieniane w pojedynczym FrameLayout
widok.Fragment addToBackStack() i popBackStackImmediate() nie działa
ActionBarActivity automatycznie zastępuje/zatwierdza fragment A. Następnie, gdy użytkownik dotknie przycisku, działanie hostingu zastępuje/zatwierdza nowy fragment B. Moim celem jest, aby użytkownik mógł wrócić do fragmentu A, gdy tylko naciska przycisk powrotu.
Kod teraz.
główną działalność
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();
...
}
}
Problem
Nawet jeśli addToBackStack()
nazywa, kiedy jestem na fragment B, nie jestem w stanie wrócić do fragmentu A. główną działalność jest bezpośrednio zamknięte. Mimo to próbowałem samodzielnie zarządzać tylnym stosem bez powodzenia. Widzę, że fragment jest na stosie, ale jeśli zadzwonię pod numer popBackStackImmediate()
, fragment A zostanie wyskoczony, a transakcja fragmentu nie zostanie wykonana. (Pierwszy z powrotem prasa nic nie stało, drugi aktywność zamknięte)
Załączam również logcat FragmentManager:
http://pastebin.com/hFLHprL8
Dziękuję. Zastanawiam się, dlaczego dokumentacja Androida nie wspomniała o tej ważnej rzeczy? Lub po prostu tęsknię za tym ... – Ryde