android fragments - studio - Mapa fragmento V2 en un fragmento
navigation view fragment android (4)
Estoy frente a un problema "Expulsión de puntero nulo en getmap ()" en Google Map Fragments. Quiero insertar mapfragment en un fragmento. Por favor, revise el código y dígame si estoy tomando la aplicación correcta o no ... y dígame exactamente qué debo hacer con mi código para que funcione
Mi archivo de diseño:
<?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);
}
}
Eliminar todo el código fmap:
SupportMapFragment fmap = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
if (fmap == null) {
fmap = SupportMapFragment.newInstance();
ft.add(R.id.map, fmap);
}
Ya tiene una instancia del mapa guardada como la variable "mapa", así que use esa.
Primero debe inflar el diseño. El problema es que estás haciendo eso al final de onCreateView, por lo que el fragmento de mapa no está allí cuando llamas a findFragmentById.
Además, PerxDetailedFragment debe extender Fragment, no 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;
}
Necesita extender 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);
}
}
gMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.map)).getMap();