0

ビュー ページャーでの Google マップ フラグメントの表示に問題があります。ビューページャーというアクティビティがあり、ビューページャーのフラグメントの 1 つに Google マップ 2.0 フラグメントがあります。

フラグメントのレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical" >

    <TextView
        android:id="@+id/no_profile_dialog_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:text="@string/about_screen_info" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginBottom="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:scaleType="fitCenter"
        android:src="@drawable/banner_bf" />

    <fragment
        android:id="@+id/about_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"
        android:tag="AboutMapFragment"
        map:mapType="normal" />

</LinearLayout>

フラグメント クラス:

public class AboutFragment extends Fragment {

    public static final String TAG = AboutFragment.class.getSimpleName();

    private SupportMapFragment mapFragment;
    private GoogleMap map;

    public static AboutFragment newInstance() {
        AboutFragment fragment = new AboutFragment();
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        return inflater.inflate(R.layout.fragment_about, container, false);
    }



    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        FragmentManager fm = getChildFragmentManager();
        mapFragment = (SupportMapFragment) fm.findFragmentById(R.id.about_map);

        if (mapFragment == null) {
            mapFragment = SupportMapFragment.newInstance();
            fm.beginTransaction().replace(R.id.about_map, mapFragment).commit();
            fm.executePendingTransactions();
        }

    }

    @Override
    public void onResume() {

        super.onResume();

        if (map == null) {
            map = mapFragment.getMap();
            if(map != null){
                Log.d(TAG, "map in AboutFragment initialized!");
                drawPositionOnMap();
            }else{
                Log.d(TAG, "map in AboutFragment is null!");
            }
        }
    }

    private void drawPositionOnMap() {

        LatLng latLng = new LatLng(20, 50);
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 20));
        map.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
        map.addMarker(new MarkerOptions().position(latLng));
        map.setMyLocationEnabled(true);

    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ((HomeActivity)getActivity()).getCurrentSlidingMenu().addIgnoredView(view.findViewById(R.id.about_map));
    }
}

したがって、問題は次のとおりです。このフラグメントに切り替えると、マップが初期化されたように見えますが、移動可能なマップの代わりに、0,0 座標を中心とする静的なマップ スナップショットが表示されます。

ここに画像の説明を入力

しかし!デバイスの画面をロックしてからロックを解除すると、マップは正常に初期化されます!

誰でも私を助けてもらえますか?

4

2 に答える 2

1

同じ問題があり、getChildFragmentManager() の代わりに getFragmentManager() を使用して解決しました。同じ実装を使用していました。

FragmentManager fm = getFragmentManager(); 
fragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
if (fragment == null) {
    fragment = SupportMapFragment.newInstance();
    fm.beginTransaction().replace(R.id.map_container, fragment).commit();
    fm.executePendingTransactions();
}

私はそれを変更し、私の問題は解決しました...これがあなたにも役立つことを願っています.

于 2014-01-24T20:44:43.293 に答える