2016年12月27日火曜日

場所を選択するUIで地図を表示する必要があり、DialogFragmentでMapFragmentを設定した際に、1回目の表示の時は問題ないけど、2回目に表示しようするとDuplicate idのエラーが発生した


 Duplicate id 0x7f0e00d9, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.SupportMapFragment


1回目の時にDialogをdismissしてもMapFragmentはクリアされてないらしい
そのため2回目でDuplicateとなってしまっている


結論として、DialogFragmentのdismissをオーバーライドしてmapのFragmentをremoveすることで対応した



<fragment android:id="@+id/map" class="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="250dp" />


@Overridepublic void onDismiss(DialogInterface dialog) {
  super.onDismiss(dialog);
  if (getActivity() != null) {
    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
    Fragment fragment = fragmentManager.findFragmentById(R.id.map);
    if (fragment != null) {
      getActivity().getSupportFragmentManager().beginTransaction().remove(fragment).commit();
    }
  }
}


同様の問題がDialogFragmentでなくFragmentで起こる場合には、onDestoroyView()の中で同じようにMapFragmentを削除してやれば問題なく動作すると思う

0 コメント:

コメントを投稿