2

これを行うための私の戦略は、MapView を使用しているときは非常に単純でしたが、現在 Android Maps v2 に移行しているため、MapFragment を使用する必要があります。私のシナリオでは、イベントのリストを取得する必要があります。次に、これらをバックグラウンドでジオデコードして緯度と経度を取得し、ユーザーからの距離を計算してマップに配置する必要があります。ユーザーがリスト フラグメントとマップ フラグメントを切り替えることができるアクションバー ボタンがありますが、問題は、リスト アダプターの更新中にマップ フラグメントにマーカーを継続的に追加できるように、両方のフラグメントをメモリに保持し、ライフサイクルを回避する方法です。リストフラグメントで?

現在、FrameLayout を FragmentTransaction.replace で各 Fragment に置き換えていますが、これにより他のフラグメントが破壊されますが、単に非表示にしたいだけです (MapView の可視性を View.GONE に設定する前に)。

編集

私のコードは次のようになりました:

@Override
    public void swapFragments() {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        if (listFragment.isVisible()) {
            transaction.hide(listFragment);
            if (mapFragment.isAdded()) {
                transaction.show(mapFragment);
            } else {
                transaction.add(R.id.root, mapFragment);
            }
        } else {
            transaction.hide(mapFragment);
            transaction.show(listFragment);
        }
        transaction.commit();
    }
4

1 に答える 1

2

私は似たようなことに取り組んできました。onCreate()メインの部分に両方のフラグメントを作成しますFragmentActivity--- 次に、onclick アクションに基づいて、適切なフラグメントを表示および非表示にします。これを補足するために、listFragment の非表示をコミットする前にバック スタックに追加して、ユーザーがボタンを押したときに、前のアクティビティではなくリストを再度取得できるようにします。

ただし、現時点では、何らかの理由で GoogleMap が MapFragment で null にならないようにするのに問題があります。

私はこの問題を解決しました -- 同様の回答をここで見つけることができますMapFragment Error - CameraUpdateFactory is not initialized

于 2013-02-16T03:11:39.717 に答える