Puntero nulo en la vista inflada al cargar por segunda vez un fragmento de mapa de google

Estoy usando un DrawerLayout y cuando cargue por segunda vez un fragmento de mapa de Google la excepción se capturará como se esperaba; Sin embargo, más lejos en el mismo método cuando intento

Button btnShowList = (Button) ui.findViewById(R.id.btnShowList); 

Y obtengo una excepción de puntero nulo. Supongo que es porque ui no se le asignó ningún valor.

¿Cómo puedo lidiar con esto?

Page2.java:

 public class Page2 extends Fragment { View ui; final String TAG = "POPE"; final int CODIGO_DE_RESULTADO_1 = 1; // Es para usarlo en onActivityResult(); private GoogleMap mMap; public Page2(){ // Este es el constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (ui != null) { ViewGroup parent = (ViewGroup) ui.getParent(); if (parent != null){ parent.removeView(ui); } } try { ui = inflater.inflate(R.layout.activity_page2,container,false); } catch (InflateException e) { Log.i(TAG,"HERE COMES THE STACK TRACE"); e.printStackTrace(); } FragmentManager fm = getFragmentManager(); mMap = ((MapFragment) fm.findFragmentById(R.id.map)).getMap(); mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); mMap.setMyLocationEnabled(true); Button btnShowList = (Button) ui.findViewById(R.id.btnShowList); btnShowList.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showFileslist(); } }); return ui; } } 

Activity_page2.xml:

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:id="@+id/btnShowList" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="Load points" /> 

Iniciar sesión:

 07-08 22:17:44.203: I/POPE(11859): HERE COMES THE STACK TRACE 07-08 22:17:44.213: W/System.err(11859): android.view.InflateException: Binary XML file line #6: Error inflating class fragment 07-08 22:17:44.213: W/System.err(11859): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710) 07-08 22:17:44.213: W/System.err(11859): at android.view.LayoutInflater.rInflate(LayoutInflater.java:752) 07-08 22:17:44.213: W/System.err(11859): at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 07-08 22:17:44.213: W/System.err(11859): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 07-08 22:17:44.213: W/System.err(11859): at com.jorgeandresserrano.gpstools.Page2.onCreateView(Page2.java:52) 07-08 22:17:44.213: W/System.err(11859): at android.app.Fragment.performCreateView(Fragment.java:1695) 07-08 22:17:44.213: W/System.err(11859): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903) 07-08 22:17:44.213: W/System.err(11859): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075) 07-08 22:17:44.213: W/System.err(11859): at android.app.BackStackRecord.run(BackStackRecord.java:682) 07-08 22:17:44.213: W/System.err(11859): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1455) 07-08 22:17:44.223: W/System.err(11859): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441) 07-08 22:17:44.223: W/System.err(11859): at android.os.Handler.handleCallback(Handler.java:725) 07-08 22:17:44.223: W/System.err(11859): at android.os.Handler.dispatchMessage(Handler.java:92) 07-08 22:17:44.223: W/System.err(11859): at android.os.Looper.loop(Looper.java:137) 07-08 22:17:44.223: W/System.err(11859): at android.app.ActivityThread.main(ActivityThread.java:5293) 07-08 22:17:44.223: W/System.err(11859): at java.lang.reflect.Method.invokeNative(Native Method) 07-08 22:17:44.223: W/System.err(11859): at java.lang.reflect.Method.invoke(Method.java:511) 07-08 22:17:44.223: W/System.err(11859): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 07-08 22:17:44.223: W/System.err(11859): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 07-08 22:17:44.223: W/System.err(11859): at dalvik.system.NativeStart.main(Native Method) 07-08 22:17:44.223: W/System.err(11859): Caused by: java.lang.IllegalArgumentException: Binary XML file line #6: Duplicate id 0x7f05003f, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment 07-08 22:17:44.223: W/System.err(11859): at android.app.Activity.onCreateView(Activity.java:4863) 07-08 22:17:44.233: W/System.err(11859): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:686) 07-08 22:17:44.233: W/System.err(11859): ... 19 more 07-08 22:17:44.233: D/AndroidRuntime(11859): Shutting down VM 07-08 22:17:44.233: W/dalvikvm(11859): threadid=1: thread exiting with uncaught exception (group=0x410feac8) 07-08 22:17:44.233: E/AndroidRuntime(11859): FATAL EXCEPTION: main 07-08 22:17:44.233: E/AndroidRuntime(11859): java.lang.NullPointerException 07-08 22:17:44.233: E/AndroidRuntime(11859): at com.myname.myapp.Page2.onCreateView(Page2.java:66) 07-08 22:17:44.233: E/AndroidRuntime(11859): at android.app.Fragment.performCreateView(Fragment.java:1695) 07-08 22:17:44.233: E/AndroidRuntime(11859): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903) 07-08 22:17:44.233: E/AndroidRuntime(11859): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075) 07-08 22:17:44.233: E/AndroidRuntime(11859): at android.app.BackStackRecord.run(BackStackRecord.java:682) 07-08 22:17:44.233: E/AndroidRuntime(11859): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1455) 07-08 22:17:44.233: E/AndroidRuntime(11859): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441) 07-08 22:17:44.233: E/AndroidRuntime(11859): at android.os.Handler.handleCallback(Handler.java:725) 07-08 22:17:44.233: E/AndroidRuntime(11859): at android.os.Handler.dispatchMessage(Handler.java:92) 07-08 22:17:44.233: E/AndroidRuntime(11859): at android.os.Looper.loop(Looper.java:137) 07-08 22:17:44.233: E/AndroidRuntime(11859): at android.app.ActivityThread.main(ActivityThread.java:5293) 07-08 22:17:44.233: E/AndroidRuntime(11859): at java.lang.reflect.Method.invokeNative(Native Method) 07-08 22:17:44.233: E/AndroidRuntime(11859): at java.lang.reflect.Method.invoke(Method.java:511) 07-08 22:17:44.233: E/AndroidRuntime(11859): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 07-08 22:17:44.233: E/AndroidRuntime(11859): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 07-08 22:17:44.233: E/AndroidRuntime(11859): at dalvik.system.NativeStart.main(Native Method) 

La línea 66 es:

 Button btnShowList = (Button) ui.findViewById(R.id.btnShowList); 

El problema se puede solucionar eliminando el fragmento de mapa en el método onDestroyView () justo antes de salir. Me gusta esto:

 @Override public void onDestroyView() { super.onDestroyView(); MapFragment f = (MapFragment) getFragmentManager().findFragmentById(R.id.map); if (f != null){ getFragmentManager().beginTransaction().remove(f).commit(); } } 

Esta publicación explica esto más detalladamente https://stackoverflow.com/a/14484640/2422833

¿Qué tal usar OnResume para su fragmento. Haga una referencia a su ui. Y OnResume comprueba nuevamente que el objeto ui es nulo o no, infla de nuevo. Desde que llamó a la segunda vez existe la posibilidad de que no pasen por su onCreateView de nuevo.

  • ¿Cómo puedo hacer un ListView sensible al tacto en todo su ancho para hacer clic en un elemento?
  • Acceso de dominio a través de subprocesos con rxjava y dagger2
  • Android SDK r18 parece haber roto ORMLite
  • Fragmento de configuración de Android
  • Retrofit call dentro de AsyncTask
  • Cómo manejar ConcurrentModificationException en Android
  • ¿Cómo crear una aplicación para Android sin utilizar Android Studio?
  • Mensaje de error de Logcat: intento de destruir la barrera con un conteo no nulo
  • Cómo hacer una cámara personalizada con Live Stickers
  • Convertir cadenas de escape HTML a unicode simple / ASCII
  • Android Studio, Java 8 y Función
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.