リストがあるアプリケーションがあり、その中のアイテムをクリックすると、マップなどを含む詳細ビューが表示されます。
これはしばらく前から存在していましたが、昨日、奇妙なクラッシュ ログを取得しました。これは、数か月前にこのバージョンを展開して以来初めてのものです。クラッシュレポートによると、4.4 を実行している Samsung Galaxy S4 にありました。
基本的にそれは言う
FragmentManager manager = mapFragment.getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
どうやら前の行の「getFragmentManager」がnullを返すため、begintransaction呼び出しでnullpointerexceptionをスローします。
私のmapfragmentは、次のように親linearlayout(リストを持つもの)で初期化されます:
userStatusDetailsLayout = (UserStatusDetailsLayout) inflater.inflate(R.layout.userstatsdetails, container, false);
私は直接電話する
userStatusDetailsLayout.initCompononents(activity);
そのメソッドで、nullpointer の原因となった mapfragment を初期化します。
mapFragment = (SupportMapFragment) activity.getSupportFragmentManager().findFragmentById(R.id.statsDetailMap);
これは、テスト ユニットでもテスターでも見たことがありません。私は困惑しています。inflate と findfragment のタイミングと何か関係がありますか? (detailslayout を膨らませている理由は、誰かが実際にそれを見たいと思わない限り、やりたくないからです。彼らがそうするときは、それを保持して再利用したいからです。特に低速の電話では、マップを膨らませるにはかなりのコストがかかります)。
これを投稿して、これがいつ起こるか誰かが知っているかどうかを確認します...