0

私はアンドロイドタブレットプロジェクトを開発しています。デュアルペイン レイアウトがあります。左側には leftscrollfrg フラグメントがあり、右側の mainmapfragment も実行され、マップが開きます。左側で createproject ボタンをクリックします。ボタンをクリックすると、mainmapfragment が非表示になり、viewpager フラグメントである別のフラグメントが追加されます。最初のページには CreateProjectFrg1 フラグメントがあり、その中に別のマップ フラグメント (CreateProjectMapFrg) を追加するボタンがあります。

問題は、2 番目のマップを開いたときに、最初のマップがフリーズしたように表示されることです。しかし、古い地図が左右からパディングされているため、新しく開いた地図を見ることができます。また、画面をオフにして再度オンにすると、フリーズしていた古いマップが消えます。

どうすればこの問題を解決できますか?

注: 階層ビューでは、フリーズ マップが表示されません。

凍った地図

public class LeftScrollFrg extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View vw = inflater.inflate(R.layout.frg_left_behind, container, false);

            frg_map = (MainMapFragment) getActivity()
                        .getSupportFragmentManager().findFragmentByTag(
                                MAP_FRAGMENT_TAG);
            if (frg_map == null) {

                    frg_map = new MainMapFragment();

                    FragmentTransaction ft = getFragmentManager()
                            .beginTransaction();

                    ft.replace(R.id.above_framelayout, frg_map, MAP_FRAGMENT_TAG);
                    ft.addToBackStack(MAP_FRAGMENT_TAG);
                    ft.commit();
            }

            imgbtn_createproject.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    hideMainMapFrg();

                    openCreateProjectFrg();
                }
            });

            imgbtn_map.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    hideCreateProjectFrg();

                    openMapFrg();

                }
            });
            return vw;
    }

        private void hideMainMapFrg() {

            fm = getActivity().getSupportFragmentManager();

            frg_map = (MainMapFragment) fm
                    .findFragmentByTag(MAP_FRAGMENT_TAG);

            if (fm != null) {
                ft = fm.beginTransaction();

                if (frg_map != null) {
                    if (frg_map.isVisible()) {
                        ft.hide(frg_map);
                    }
                }
            }
            ft.commit();

        }

        private void openMapFrg() {
            fm = getActivity().getSupportFragmentManager();

            frg_map = (MainMapFragment) fm
                    .findFragmentByTag(MAP_FRAGMENT_TAG);

            if (fm != null) {
                ft = fm.beginTransaction();


                if (frg_createproject != null) {
                    if (frg_createproject.isVisible()) {
                        ft.hide(frg_createproject);
                    }
                }

                if (frg_map == null) {
                    frg_map = new MainMapFragment();
                    ft.add(R.id.above_framelayout, frg_map, MAP_FRAGMENT_TAG);
                } else {
                    if (frg_map.isHidden()) {
                        ft.show(frg_map);
                    }
                }
                ft.addToBackStack(MAP_FRAGMENT_TAG);
                ft.commit();
            }

        }
    }

    public class MainMapFragment extends SupportMapFragment implements
            LocationListener, LocationSource, OnInfoWindowClickListener,
            OnMapClickListener {
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState);
            view = inflater.inflate(R.layout.frg_mainproject, container, false);


            return view;
            }


    }

    //frg_mainproject.xml
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="@dimen/rightpanel_margin" >

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





    public class CreateProjectFrg1 extends Fragment{
            @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View vw = inflater.inflate(R.layout.frg_createproject1, container,
                    false);

            imgvw_createprojectmap.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    openCreateMap();
                }
            });

                    return vw;
            }

                private void openCreateMap() {
            fm = getActivity().getSupportFragmentManager();

            frg_map = (CreateProjectMapFrg) fm
                    .findFragmentByTag(CREATEPROJECTMAP_FRAGMENT_TAG);



            if (fm != null) {
                ft = fm.beginTransaction();
                if (frg_map == null) {

                    frg_map = new CreateProjectMapFrg();
                    ft.add(R.id.above_framelayout, frg_map, CREATEPROJECTMAP_FRAGMENT_TAG);
                }
                ft.addToBackStack(CREATEPROJECTMAP_FRAGMENT_TAG);
                ft.commit();


            }

        }


    }







    public class CreateProjectMapFrg extends SupportMapFragment implements
            OnMapClickListener, OnMarkerClickListener {

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState);

            if (view != null) {
                ViewGroup parent = (ViewGroup) view.getParent();
                if (parent != null)
                    parent.removeView(view);
            }

            try {
                view = inflater.inflate(R.layout.frg_createprojectmap, container,
                        false);
            } catch (InflateException e) {

            }
            setViewsResource(view);
            setUpMapIfNeeded();

            return view;
        }

            private void setUpMapIfNeeded() {

            if (mMap == null) {

                mMap = ((SupportMapFragment) getActivity()
                        .getSupportFragmentManager().findFragmentById(
                                R.id.frg_createproject_map)).getMap();

                if (mMap != null) {
                    setUpMap();
                }
            }

        }

    }

    //frg_createprojectmap.xml
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

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

     </RelativeLayout>

更新されたコード

4

1 に答える 1

0

これはhttps://code.google.com/p/gmaps-api-issues/issues/detail?id=5027です

MapFragment回避策として、単に非表示にするのではなく、フラグメント マネージャーから明示的に削除/置換することができます。フラグメント全体を削除したくない場合はMapView、フラグメントが非表示になる直前にそれを使用してデタッチする独自のフラグメントを実装することもできます (さらにカスタム コードが必要になる場合があります)。

于 2013-06-06T07:10:06.660 に答える