私は、起動時に1つのカスタムListFragmentをロードするFragmentActivityを持っていて、アイテムがクリックされた後にそのフラグメントを新しいフラグメントに置き換えます。 ListFragmentサブクラス内のリスト項目のハンドラでフラグメントaddToBackStackアプリケーションがクラッシュする
public void onCreate(Bundle savedInstanceState) {
...
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.list_activity, listFragment, "venueListFragment");
ft.commit();
...
}
:フラグメント活動のサブクラスで
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();
}
私はをクリックしようとすると、これが最初のフラグメントの後に正常に動作しますが、 2番目のフラグメントのアイテムで、私は内部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では、私は明示的にCursorLoaderのcancelLoad()メソッドを呼び出します。
これを修正する方法についてのご意見はありますか?これはAndroid Compatibility Libraryのバグですか?
最新のACL(Rev 7)を使用し、最小SDKをAPIレベル7(2.1)に設定しています。
あなたは命を救っています! – oohaba