2012-04-02 23 views
2

Ich habe eine FragmentActivity, die beim Start ein benutzerdefiniertes ListFragment lädt und nach dem Klicken auf ein Element durch ein neues Fragment ersetzt.Fragment addToBackStack stürzt ab app

Im Fragmente Aktivität Unterklasse:

public void onCreate(Bundle savedInstanceState) { 
     ... 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.add(R.id.list_activity, listFragment, "venueListFragment"); 
     ft.commit(); 
     ... 
} 

Im Listenpunkt-Handler in der ListFragment Unterklasse:

public void onListItemClick(ListView l, View v, int position, long id) { 

    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 

    VenueListFragment newFragment = VenueListFragment.newInstance(nextListType, nextRowID); 

    ft.replace(R.id.list_activity, newFragment, "venueListFragment"); 
     ft.addToBackStack(null);     
    ft.commit(); 
} 

Dies funktioniert nach dem ersten Fragmente in Ordnung, aber wenn ich auf einem klicken versuchen Element im zweiten Fragment, bekomme ich diesen Fehler aus der internen FragmentManager-Klasse:

04-03 01:04:24.999: E/AndroidRuntime(15016): FATAL EXCEPTION: main 
04-03 01:04:24.999: E/AndroidRuntime(15016): java.lang.NullPointerException 
04-03 01:04:24.999: E/AndroidRuntime(15016): at android.support.v4.app.LoaderManagerImpl.hasRunningLoaders(LoaderManager.java:824) 
04-03 01:04:24.999: E/AndroidRuntime(15016): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082) 
04-03 01:04:24.999: E/AndroidRuntime(15016): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 
04-03 01:04:24.999: E/AndroidRuntime(15016): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 
04-03 01:04:24.999: E/AndroidRuntime(15016): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420) 
04-03 01:04:24.999: E/AndroidRuntime(15016): at android.os.Handler.handleCallback(Handler.java:587) 

Ich habe festgestellt, wenn ich addToBackStack auskommentiere, wird das nächste Fragment geladen, aber ich kann nicht mehr rückwärts navigieren. Wenn ich einfach 5-7 Sekunden warte, bevor ich auf das nächste Listenelement klicke, stürzt die App nicht ab, aber das Laden des Cursors innerhalb des Fragments endet viel früher, da die gesamte Liste bereits sichtbar ist. In OnDestroyView, ich explizit CurrentLoad() -Methode CursorLoader trotzdem aufrufen.

Irgendwelche Gedanken, wie Sie das beheben können? Ist das ein Fehler in der Android Compatibility Library?

Ich verwende die neueste Version von ACL (rev 7) und habe das min SDK auf API Level 7 (2.1) eingestellt.

Antwort

3

Nachdem Sie Ihre commit() versuchen executePendingTransactions(). commit() ist ein asynchroner Prozess und kann daher möglicherweise nicht wie erwartet ausgeführt werden.

ft.commit(); 
getSupportFragmentManager().executePendingTransactions(); 
+0

Sie sind ein Lebensretter! – oohaba