3

以下に、マップを制御するための基本的なコードを示します。後で本当に高度なことをします。まで、すべてが完璧に機能しているようonResume()です。

レイアウトは次のとおりです。複数のフラグメントを使用して、1 つのアクティビティでアプリをナビゲートします。これmapFragmentはフラグメントの中に含まれています。これはうまくいきます。ただし、別のフラグメントを追加してこれをバックスタックにプッシュすると、後で戻ってきたときにマップが応答しなくなります。

への呼び出しを に移動してこれを修正しようとしsetupMaps();ましたがonResume()gMapsから取得すると null になりgMaps = mapFragment.getMap();ましたsetViews()

これをどのように処理すればよいですか?

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        root = inflater.inflate(R.layout.fragment_maps, container, false);

        setupMaps();
        return root;
    }

    private void setupMaps()
    {
        gMaps = null;
        fm = getActivity().getSupportFragmentManager();

        mapFragment = SupportMapFragment.newInstance();
        android.support.v4.app.FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.add(R.id.flMapContainer, mapFragment).commit();

    }


    @Override
    public void onResume()
    {
        super.onResume();

        mapFragment.onResume();
        setViews();
    }

    private void setViews()
    {
        gMaps = mapFragment.getMap();
        getData(); // initializes overlays, markers, polygons etc.
    }

    @Override
    public void onPause()
    {           
        mapFragment.onPause();
        super.onPause();
    }
4

3 に答える 3

7

logcat に何か表示されますか? 以前にこのような問題がいくつかありましたが、古いマップ フラグメントの View が新しいインスタンスを作成する前に親の ViewGroup から削除されていないことに関連していると思います。これにより、重複フラグメントに関するエラーが発生しました。

SupportMapFragment の新しいインスタンスを作成する前に、flMapContainer からすべてのビューを削除してみてください。

于 2013-05-07T05:25:27.557 に答える
4

Scott Stanchfield のソリューションを実装するには、別のフラグメントを追加/置換するときに cleanFrame() を呼び出します。

public void cleanFrame(){
FrameLayout FL = (FrameLayout) thisview.findViewById(R.id.myfragmentcontainer);
   FL.removeAllViewsInLayout();
}
于 2013-05-19T15:56:30.397 に答える
0

内部manifest.xmlでハードウェアアクセラレーションを無効にしましたが、その後、すべてが正常に機能し始めました:

<application android:hardwareAccelerated="false">
 ...
</application>
于 2014-01-29T16:49:07.087 に答える