studio proyecto otra importar exportar espaƱol descargado computadora como abrir android eclipse gradle android-studio

proyecto - findFragmentById for SupportMapFragment devuelve nulo en Android Studio



importar apk android studio (4)

Recientemente migré un proyecto de Eclipse a Android Studio. Todo está configurado y funciona bien, excepto mi fragmento que usa un SupportMapFragment. El siguiente findFragmentById (que funcionó al construir en Eclipse) ahora devuelve nulo :(

public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); SupportMapFragment m = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.safety_map));

fragmento de xml ...

<FrameLayout 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" > <fragment android:id="@+id/safety_map" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="40dp" map:cameraTargetLat="@string/livesafe_latitude" map:cameraTargetLng="@string/livesafe_longitude" map:uiZoomControls="false" class="com.google.android.gms.maps.SupportMapFragment"/>

Aquí están mis dependencias en mi build.gradle:

dependencies { //google analytics compile ''com.google.apis:google-api-services-analytics:v3-rev103-1.19.0'' //support library for api 10 compile ''com.android.support:support-v4:21.0.0'' //google play services compile ''com.google.android.gms:play-services:6.1.11'' compile project('':facebook'') compile files(''libs/android-support-multidex.jar'') compile files(''libs/aws-android-sdk-1.6.0-debug.jar'') compile files(''libs/FlurryAnalytics_3.3.2.jar'') }

No he cambiado ningún código en el archivo xml o la clase Fragment que anteriormente funcionaba en Eclipse.


A juzgar por el hecho de que está anulando Fragment.onActivityCreated() , supongo que su diseño que contiene el fragmento de mapa es el diseño de su Fragment . En ese caso, SupportMapFragment es un fragmento secundario de su Fragment hosting. Cuando intentas recuperarlo, estás usando Activity FragmentManager . En su lugar, deberías usar el Fragment tu FragmentManager :

Por ejemplo, esto:

SupportMapFragment m = ((SupportMapFragment) getActivity() .getSupportFragmentManager().findFragmentById(R.id.safety_map));

se convierte en:

SupportMapFragment m = ((SupportMapFragment) getChildFragmentManager() .findFragmentById(R.id.safety_map));


El siguiente código funcionó para mí. Estaba usando Google Map en un Fragment :

SupportMapFragment m = ((SupportMapFragment) getChildFragmentManager() .findFragmentById(R.id.safety_map));


Si. No funciona para targetSdkVersion 21, si su fragmento de Mapa es parte interna de Fragment (debido a algunos problemas, eso menciona this y this ).

Como resolución temporal puede aconsejar tal truco:

public class MyFragment extends Fragment { private SupportMapFragment fragment; private GoogleMap map; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.layout_with_map, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); FragmentManager fm = getChildFragmentManager(); fragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container); if (fragment == null) { fragment = SupportMapFragment.newInstance(); fm.beginTransaction().replace(R.id.map_container, fragment).commit(); } } }


Todas las respuestas son correctas en sus respectivas formas. Puede suceder que sigas el código java de alguien que funciona para ellos pero no para ti porque tenías una implementación diferente en tu código xml que ellos.

Déjame darte mi opinión sobre cómo logré cargar el mapa tanto en la Activity como en el Fragment

Actividad:

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

Clase de Java:

MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);

En fragmento:

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

Clase de Java:

SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);