Ich versuche, ein SupportMapFragment
dynamisch zu erstellen und es in einen FrameLayout
Container zu setzen.SupportMapFragments getMap() gibt null zurück
Mein Problem ist, dass mMapFragment.getMap()
kehrt null
...
Wer kann helfen?
CenterMapFragment.java
public class CenterMapFragment extends Fragment {
private SupportMapFragment mMapFragment;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.center_map_fragment, container, false);
}
@Override
public void onActivityCreated (Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity()) == ConnectionResult.SUCCESS) {
setUpMapIfNeeded();
}
}
private void setUpMapIfNeeded() {
if (mMapFragment == null) {
mMapFragment = SupportMapFragment.newInstance();
FragmentTransaction fragmentTransaction =
getChildFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.map, mMapFragment);
fragmentTransaction.commit();
setUpMap();
}
}
private void setUpMap() {
GoogleMap map = mMapFragment.getMap();
// map is null!
}
@Override
public void onResume()
{
super.onResume();
setUpMapIfNeeded();
}
}
center_map_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<Button
android:id="@+id/btn_loc"
android:layout_width="60dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:background="@drawable/locbtn" />
</RelativeLayout>
Wenn 'CenterMapFragment '' SupportMapFragment' erweitert, wie kann ich die Map auf 'FrameLayout' setzen? Ich muss das Layout ändern? – jul
@jul: Ein Ansatz würde 'CenterMapFragment' haben, um ein' onCreateView() 'zu implementieren, das 'super.onCreateView()' zuerst aufruft, um das zu erhalten, was 'SupportMapFragment' erzeugt. Dann würde es das 'FrameLayout' erzeugen und das' Super'-erzeugte 'View' als Kind des' FrameLayout' hinzufügen. Dann würde es 'FrameLayout' von' onCreateView() 'zurückgeben. Dadurch wird der Inhalt von "SupportMapFragment" in "CenterMapFragment" umgewandelt. Oder haben Sie 'CenterMapFragment' nur ein gewöhnliches' Fragment' und verwenden Sie 'MapView' anstatt' SupportMapFragment'. Oder finden Sie einen besseren Zeitpunkt, um 'setUpMap()' mit Ihrem aktuellen Code aufzurufen. – CommonsWare
Ok, ich werde ein 'MapView' verwenden. – jul