2013-01-09 18 views
3

我的問題很簡單,我將4個FrameLayout添加到我的XML中,並通過這些容器中的代碼添加4個MapFragment。MapFragment在旋轉後變得無法響應

這樣的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:map="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/map_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="0.5" 
    android:orientation="horizontal"> 
    <FrameLayout 
     android:id="@+id/map1_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="0.5""/> 
    <FrameLayout 
     android:id="@+id/map2_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="0.5"/> 
    </LinearLayout> 
    <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="0.5" 
    android:orientation="horizontal"> 
    <fragment 
     android:id="@+id/map3_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="0.5"/> 
    <fragment 
     android:id="@+id/map4_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="0.5""/> 
    </LinearLayout> 

,並在我的活動

public class MultiGoogleMapActivity extends FragmentActivity { 

    private GoogleMap mMap; 
    private GoogleMap mMapUp; 
    private GoogleMap mMapMiddle; 
    private GoogleMap mMapLow; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_multi_google_map); 

mMap1Fragment = SupportMapFragment.newInstance(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager() 
         .beginTransaction(); 
       fragmentTransaction.add(R.id.map1_container, mMap1Fragment, MAP_FRAGMENT_TAG); 
       fragmentTransaction.commit(); 
mMap2Fragment = SupportMapFragment.newInstance(new GoogleMapOptions().zoomControlsEnabled(false).zoomGesturesEnabled(false).compassEnabled(false).rotateGesturesEnabled(false).scrollGesturesEnabled(false)); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager() 
         .beginTransaction(); 
       fragmentTransaction.add(R.id.map2_container, mMap2Fragment, MAP_FRAGMENT_TAG); 
       fragmentTransaction.commit(); 
mMap3Fragment = SupportMapFragment.newInstance(new GoogleMapOptions().zoomControlsEnabled(false).zoomGesturesEnabled(false).compassEnabled(false).rotateGesturesEnabled(false).scrollGesturesEnabled(false)); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager() 
         .beginTransaction(); 
       fragmentTransaction.add(R.id.map3_container, mMap3Fragment, MAP_FRAGMENT_TAG); 
       fragmentTransaction.commit(); 
mMap4Fragment = SupportMapFragment.newInstance(new GoogleMapOptions().zoomControlsEnabled(false).zoomGesturesEnabled(false).compassEnabled(false).rotateGesturesEnabled(false).scrollGesturesEnabled(false)); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager() 
         .beginTransaction(); 
       fragmentTransaction.add(R.id.map4_container, mMap4Fragment, MAP_FRAGMENT_TAG); 
       fragmentTransaction.commit(); 

     setUpMapIfNeeded(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     setUpMapIfNeeded(); 
    } 

    private void setUpMapIfNeeded() { 
     // Do a null check to confirm that we have not already instantiated the 
     // map. 
     if (mMap == null) { 
      mMap = mMap1Fragment.getMap(); 
     } 
     if (mMapUp == null) { 
      mMapUp = mMap2Fragment.getMap(); 
      mMapUp.setOnMapClickListener(new OnMapClickListener() { 

       public void onMapClick(LatLng arg0) { 
        CameraPosition cp = mMapUp.getCameraPosition(); 
        mMapUp.moveCamera(CameraUpdateFactory.newCameraPosition(mMap.getCameraPosition())); 
        mMap.moveCamera(CameraUpdateFactory.newCameraPosition(cp)); 
       } 
      }); 

     } 
     if (mMapMiddle == null) { 
      mMapMiddle = mMap3Fragment.getMap(); 
      mMapMiddle.setOnMapClickListener(new OnMapClickListener() { 

       public void onMapClick(LatLng arg0) { 
        CameraPosition cp = mMapMiddle.getCameraPosition(); 
        mMapMiddle.moveCamera(CameraUpdateFactory 
          .newCameraPosition(mMap.getCameraPosition())); 
        mMap.moveCamera(CameraUpdateFactory 
          .newCameraPosition(cp)); 
       } 
      }); 
     } 
     if (mMapLow == null) { 
      mMapLow = mMap4Fragment.getMap(); 
      mMapLow.setOnMapClickListener(new OnMapClickListener() { 

       public void onMapClick(LatLng arg0) { 
        CameraPosition cp = mMapLow.getCameraPosition(); 
        mMapLow.moveCamera(CameraUpdateFactory 
          .newCameraPosition(mMap.getCameraPosition())); 
        mMap.moveCamera(CameraUpdateFactory 
          .newCameraPosition(cp)); 
       } 
      }); 
     } 
     initializeMapsPositions(); 
    } 

    private void initializeMapsPositions() { 
     if (mMap != null) { 
      mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
        47.224217, -1.631409), 16)); 
     } 
     if (mMapUp != null) { 
      mMapUp.setOnCameraChangeListener(new OnCameraChangeListener() { 

       public void onCameraChange(CameraPosition arg0) { 
        mMapUp.animateCamera(CameraUpdateFactory.newLatLngBounds(
          new LatLngBounds(new LatLng(-21.417276,55.039925), 
             new LatLng(-20.815174,56.008095)), 
          10)); 
        mMapUp.setOnCameraChangeListener(null); 
       } 
      }); 

     } 
     if (mMapMiddle != null) { 
      mMapMiddle.setOnCameraChangeListener(new OnCameraChangeListener() { 

       public void onCameraChange(CameraPosition arg0) { 
        mMapMiddle.animateCamera(CameraUpdateFactory.newLatLngBounds(
          new LatLngBounds(new LatLng(14.337573,-61.441246), 
              new LatLng(14.947439,-60.603539)), 
          10)); 
        mMapMiddle.setOnCameraChangeListener(null); 
       } 
      }); 
     } 
     if (mMapLow != null) { 
      mMapLow.setOnCameraChangeListener(new OnCameraChangeListener() { 

       public void onCameraChange(CameraPosition arg0) { 
        mMapLow.animateCamera(CameraUpdateFactory.newLatLngBounds(
          new LatLngBounds(new LatLng(17.596903,-78.448288), 
              new LatLng(18.643643,-76.207077)), 
          10)); 
        mMapLow.setOnCameraChangeListener(null); 
       } 
      }); 

     } 

    } 

} 

的probleme是:當我旋轉設備時,MapFragments不resond觸摸事件了...

有沒有人有同樣的問題,並解決它?

+0

把你的代碼在這裏 –

回答

5

我有同樣的問題,經過多次故障排除發現容器中有多個地圖片段。

所以,我用

FragmentTransaction.replace 

解決了這個問題,而不是

.add 
+0

這爲我工作,謝謝! –

相關問題