3

我在Google Map片段中遇到了一些問題「getmap()中的空指針分解」。我想插入mapfragment在片段 請檢查代碼,讓知道我是否採取正確的appraoch或不.. ,讓我知道正是我需要我的代碼,使做工作在片段中映射片段V2

我佈局文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="@drawable/bg2" 
    android:weightSum="100"> 

<Button 
    android:id="@+id/perx_button" 
    android:layout_marginTop="70dip" 
    android:layout_gravity="center" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/perx_card_btn" /> 

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

</LinearLayout> 


public class PerxDetailedFragment extends SupportMapFragment { 

    static final LatLng HAMBURG = new LatLng(53.558, 9.927); 
    static final LatLng KIEL = new LatLng(53.551, 9.993); 
GoogleMap map; 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 

    FragmentTransaction ft = getFragmentManager().beginTransaction(); 

    map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)) 
      .getMap(); 

    SupportMapFragment fmap = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map); 

    if (fmap == null) { 
     fmap = SupportMapFragment.newInstance(); 
     ft.add(R.id.map, fmap); 
    } 

    ft.commit(); 

    Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG) 
      .title("Hamburg")); 
     Marker kiel = map.addMarker(new MarkerOptions() 
      .position(KIEL) 
      .title("Kiel") 
      .snippet("Kiel is cool") 
      .icon(BitmapDescriptorFactory 
       .fromResource(R.drawable.ic_launcher))); 

     // Move the camera instantly to hamburg with a zoom of 15. 
     map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15)); 

     // Zoom in, animating the camera. 
     map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null); 


    return inflater.inflate(R.layout.perx_detailed, null, false); 
} 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState);  


    } 


} 

回答

6

您需要首先膨脹佈局。問題在於你在onCreateView結束時這樣做,所以當你調用findFragmentById時,地圖片段不在那裏。

另外,PerxDetailedFragment應該擴展Fragment,而不是SupportMapFragment。

public class PerxDetailedFragment extends Fragment { 
    // ... 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View v = inflater.inflate(R.layout.perx_detailed, null, false); 

     map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)) 
      .getMap(); 

     //... 

     return v; 
    } 
0

刪除所有FMAP代碼:

SupportMapFragment fmap = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map); 

if (fmap == null) { 
    fmap = SupportMapFragment.newInstance(); 
    ft.add(R.id.map, fmap); 
} 

您已經保存爲「地圖」變量地圖的一個實例,所以使用的那一個。

0

您需要延長SupportMapFragment

public class MapFragment extends SupportMapFragment{ 

GoogleMap mGoogleMap; 
Context mContext; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    mContext=getActivity(); 
    View rootView = inflater.inflate(R.layout.fragment_home, container, false); 
    initializeMap(rootView); 
    return rootView; 
} 
void initializeMap(View rootView) 
{ 
    if (mGoogleMap == null) { 
     mGoogleMap=((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map4)).getMap(); 
     // Getting Map for the SupportMapFragment 
     mGoogleMap.setMyLocationEnabled(true); 
      if (mGoogleMap == null) { 
      Toast.makeText(getActivity().getApplicationContext(),"Sorry! unable to create maps", Toast.LENGTH_SHORT) 
        .show(); 
     } else { 
      setMapDefualtProp(); 

     } 
    }else 
     setMapDefualtProp(); 
} 

private void setMapDefualtProp() { 
    mGoogleMap.setMyLocationEnabled(true); 
    mGoogleMap.setTrafficEnabled(true); 
    mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true); 
    mGoogleMap.getUiSettings().setRotateGesturesEnabled(true); 
    mGoogleMap.getUiSettings().setCompassEnabled(true); 
    mGoogleMap.getUiSettings().setZoomGesturesEnabled(true); 
    mGoogleMap.getUiSettings().setZoomControlsEnabled(true);   
} 

}

0
gMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.map)).getMap();