2

がありActivity、そこに がありMenuItem、クリックすると次のものが初期化されますDialogFragment

MapDialogFragment df = new MapDialogFragment();
Bundle bundle = new Bundle();
bundle.putDoubleArray("lat_log", new double[] {48.85139, 2.34798});
df.setArguments(bundle);
df.show(fragmentManager, "google_maps_dialog_fragment");

この DialogFragment には、GoogleMaps が含まれ<fragment android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment"ています。

GoogleMapオブジェクトには、OnMapClickListenerユーザーがクリックするとマーカーが追加される があります。すべてうまくいきます。

次に、ユーザーが閉じるボタンをクリックすると、次のコードが実行されます。

getArguments().remove("lat_log");
dismissAllowingStateLoss();

その後Dialog、 が閉じActivityられ、ユーザーが ( を介して) 入力したデータでコードが更新されますListener

MenuItemユーザーがもう一度クリックしてDialog開くと、ユーザーが以前に挿入したすべてのデータがまだそこにあります。

ダイアログのコードがonCreateView()メソッドで初期化されました。onResume()知っておくと役立つ場合は、実装していません...

私は何を間違っていますか?

どうもありがとう、フェリペ

編集1:

I have tried the following before showing the DialogFragment:
Fragment prev = fragmentManager.findFragmentByTag("google_maps_dialog_fragment");
if(prev != null) {
    fragmentManager.beginTransaction().remove(prev).commit();
}
MapDialogFragment df = new MapDialogFragment();
Bundle bundle = new Bundle();
bundle.putDoubleArray("lat_log", new double[] {48.85139, 2.34798});
df.setArguments(bundle);
df.show(fragmentManager, "google_maps_dialog_fragment");

うまくいきませんでした...

アイデアのある人はいますか?

編集 2: 問題の原因が見つかりました:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (view != null) {
            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null)
                parent.removeView(view);
        }
        try {
            view = inflater.inflate(R.layout.dialog, container, false);
        } catch (InflateException e) {
            /* map is already there, just return view as it is */
            System.out.println("this is not working");
        }
....

何らかのクレイジーな理由で、DialogFragment を 2 回目にインスタンス化すると、inflate メソッドが null を返すため、追加しましたif (view != null)...理由はわかりません。だから私はviewas クラス変数への参照を保持しています...だから今、インフレが今戻っている理由を見つけなければなりません...

編集4

@Override
    public void onDestroyView() {
        super.onDestroyView();
        MapFragment f = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
        if (f != null) 
            getFragmentManager().beginTransaction().remove(f).commit();
    }

ほらね。これはうまくいきます!

4

0 に答える 0