У меня есть FragmentActivity, которое загружает один пользовательский ListFragment при запуске и заменяет его новым фрагментом после нажатия элемента.
В подклассе активности фрагмента:
public void onCreate(Bundle savedInstanceState) {
...
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.list_activity, listFragment, "venueListFragment");
ft.commit();
...
}
Inобработчик элемента списка в подклассе ListFragment:
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();
}
Это прекрасно работает после первого фрагмента, но когда я пытаюсь щелкнуть по элементу во втором фрагменте, я получаю эту ошибку из внутреннего класса FragmentManager:
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)
Я заметил, что если я закомментирую addToBackStack, следующий фрагмент будет загружен нормально, но, следовательно, я больше не могу перемещаться назад.Кроме того, если я просто подожду 5-7 секунд, прежде чем щелкнуть следующий элемент списка, приложение не будет аварийно завершено, но загрузчик курсора во фрагменте завершит загрузку раньше, чем это, поскольку весь список уже доступен для просмотра.В onDestroyView я в любом случае явно вызываю метод cancelLoad () CursorLoader.
Есть мысли о том, как это исправить?Это ошибка в библиотеке совместимости Android?
Я использую последнюю версию ACL (версия 7), и для min SDK задан уровень API 7 (2.1).