studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones android xml android-layout listview google-maps-android-api-2

reales - libro de android studio en español pdf



Error al inflar el fragmento de clase: ID duplicado, nulo de etiqueta o id principal con otro fragmento (3)

Intento crear una aplicación en la que cuando el usuario haga clic en un elemento en ListView, se muestre GoogleMaps.

He intentado seguir el código:

ShowPlacesActivity.java

public class ShowPlaceActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show_place); if (savedInstanceState == null) { getFragmentManager().beginTransaction() .add(R.id.container_showplaces, new PlaceholderFragment()) .commit(); } getActionBar().setSubtitle(getString(R.string.activity_showplaces_subtitle)); } }

activity_show_place.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container_showplaces" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.krupal.rememberthisplace.ShowPlaceActivity" tools:ignore="MergeRootFrame" />

fragment_show_place.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/listView_places" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>

fragment_maps.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <fragment android:id="@+id/mymap" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>

Quiero mostrar mapas en el elemento de la vista de lista clic ... por lo tanto, he implementado dos fragmentos de la siguiente manera:

En PlaceholderFragment.java , he configurado onitemclicklistener como:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_show_place, container, false); final MySqliteHelper db = new MySqliteHelper(getActivity().getBaseContext()); listview_places = (ListView)rootView.findViewById(R.id.listView_places); final PlacesAdapter places_adapter = new PlacesAdapter(getActivity(),R.layout.listview_item_row,places); listview_places.setAdapter(places_adapter); listview_places.setLongClickable(true); listview_places.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position,long id) { Place place = places_adapter.getItem(position); String dbvaluename = place.getname(); Place selectedplace = db.getPlace(dbvaluename); dblatitude = selectedplace.getlatitude(); dblongitude = selectedplace.getlongitude(); dbplacename = place.getname(); maps = new MapsFragment(); Bundle bundle = new Bundle(); bundle.putDouble("dbplacename",dblatitude); bundle.putDouble("dbplacename",dblongitude); bundle.putString("dbplacename",dbplacename); maps.setArguments(bundle); FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.container_showplaces,maps); ft.addToBackStack(null); ft.commit(); } }); } }

y en MapsFragment.java , he mostrado los mapas como:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_maps, container, false); try { // Loading map initilizeMap(); } catch (Exception e) { e.printStackTrace(); } return rootView; }

Cuando hago clic por primera vez en el elemento de ListView, muestra el mapa ... Luego, cuando selecciono otro elemento, se bloquea:

Logcat log:

android.view.InflateException: archivo XML binario línea # 7: error al inflar el fragmento de clase en android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:697) en android.view.LayoutInflater.rInflate (LayoutInflater.java:739) en android. view.LayoutInflater.inflate (LayoutInflater.java:489) en android.view.LayoutInflater.inflate (LayoutInflater.java:396) en com.krupal.rememberthisplace.MapsFragment.onCreateView (MapsFragment.java:40) en android.app.FragmentManagerImpl .moveToState (FragmentManager.java:828) en android.app.FragmentManagerImpl.moveToState (FragmentManager.java:1032) en android.app.BackStackRecord.run (BackStackRecord.java:622) en android.app.FragmentManagerImpl.execPendingActions (FragmentManager. java: 1382) en android.app.FragmentManagerImpl $ 1.run (FragmentManager.java:426) en android.os.Handler.handleCallback (Handler.java:605) en android.os.Handler.dispatchMessage (Handler.java:92) en android.os.Looper.loop (Looper.java:137) en android.app.ActivityThread.main (ActivityThread.java:44 24) en java.lang.reflect.Method.invokeNative (Método nativo) en java.lang.reflect.Method.invoke (Method.java:511) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit. java: 825) en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:592) en dalvik.system.NativeStart.main (Método nativo) Causado por: java.lang.IllegalArgumentException: archivo XML binario línea # 7 : Duplicar id 0x7f0b001e, nulo de etiqueta o id principal 0xffffffff con otro fragmento para com.google.android.gms.maps.MapFragment en android.app.Activity.onCreateView (Activity.java:4248) en android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:673) en android.view.LayoutInflater.rInflate (LayoutInflater.java:739) en android.view.LayoutInflater.inflate (LayoutInflater.java:489) en android.view.LayoutInflater.inflate (LayoutInflater.java: 396) en com.krupal.rememberthisplace.MapsFragment.onCreateView (MapsFragment.java:40) en android.app.FragmentManagerI mpl.moveToState (FragmentManager.java:828) en android.app.FragmentManagerImpl.moveToState (FragmentManager.java:1032) en android.app.BackStackRecord.run (BackStackRecord.java:622) en android.app.FragmentManagerImpl.execPendingActions (FragmentManager .java: 1382) en android.app.FragmentManagerImpl $ 1.run (FragmentManager.java:426) en android.os.Handler.handleCallback (Handler.java:605) en android.os.Handler.dispatchMessage (Handler.java:92 ) en android.os.Looper.loop (Looper.java:137) en android.app.ActivityThread.main (ActivityThread.java:4424) en java.lang.reflect.Method.invokeNative (Native Method) en java.lang. reflect.Method.invoke (Method.java:511) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:825) en com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 592) en dalvik.system.NativeStart.main (Método nativo)

EDITAR: esta solución no funcionó para mí


¡Lo resolví ahora!

La otra solución es la respuesta vinculada funcionó bien para mí.

https://.com/a/14484640/3960528

Como se explica allí, agregué el onDestroyView() en el `fragmento que contiene mapas.

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