¿ Por qué se me detiene la aplicación al usar este pequeño código? – java android bottombar

Pregunta:


Tengo un bottomBar donde tengo 5 opciones, la última es la del mapa de google API.

Mi problema es que al hacer click en esta pestaña el mapa carga todo correcto y funciona, me voy a otra pestaña y también bien, pero al volver al mapa de nuevo, se me crashea, ¿ por qué ?

Map_Fragment.java:

public class Map_fragment extends Fragment implements OnMapReadyCallback {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.activity_map, container, false);

        MapFragment mapFragment = (MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.mapid);
        mapFragment.getMapAsync(this);

        return v;
    }

    @Override
    public void onMapReady(GoogleMap map) {

        LatLng Malaga = new LatLng(36.6981483, -4.4513236);
        LatLng Melilla = new LatLng(35.2896931, -2.9427164);
        LatLng LasPalmas = new LatLng(28.135612, -15.4319612);
        LatLng Bilbao = new LatLng(43.271771,-2.9483674);
        LatLng Leon = new LatLng(42.5964305, -5.5733429);



        if (Build.VERSION.SDK_INT >= 23 &&
                ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }

        map.setMyLocationEnabled(true);
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(RudeBoys, 5)); // ZOOM AL EMPEZAR EL GOOGLE MAP




        map.addMarker(new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.mapfinal))
                .title("CLUB DE LA LUCHA")
                .snippet("Málaga")
                .position(Malaga));

        map.addMarker(new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.mapfinal))
                .title("ON FITNESS SHOP")
                .snippet("Melilla")
                .position(Melilla));

        map.addMarker(new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.mapfinal))
                .title("Sport Nutrition La Isletan")
                .snippet("Las palmas")
                .position(LasPalmas));

        map.addMarker(new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.mapfinal))
                .title("KANCHO OYAMA")
                .snippet("Bilbao")
                .position(Bilbao));

        map.addMarker(new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.mapfinal))
                .title("Power Fitness León")
                .snippet("León")
                .position(Leon));




    }
}

MainActivity1.java donde llamo a las pestañas, repito, van todas perfectas salvo si entro por 2a vez a la última, a la del mapa.

public class MainActivity1 extends AppCompatActivity {

    BottomBar mBottomBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setLogo(R.mipmap.ic_launcher);
        getSupportActionBar().setDisplayUseLogoEnabled(true);
        setContentView(R.layout.activity_main);

        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setNavigationBarColor(getResources().getColor(R.color.black));
        }

        mBottomBar = BottomBar.attach(this, savedInstanceState);
        mBottomBar.setItemsFromMenu(R.menu.menu_main, new OnMenuTabSelectedListener() {

            @Override
            public void onMenuItemSelected(@IdRes int i) {


                if (i == R.id.one) {

                    First_fragment f1 = new First_fragment();
                    getSupportFragmentManager().beginTransaction().replace(R.id.frame, f1).commit();
                }

                if (i == R.id.two) {

                    Second_fragment f2 = new Second_fragment();
                    getSupportFragmentManager().beginTransaction().replace(R.id.frame, f2).commit();
                }

                if (i == R.id.three) {

                    Three_fragment f3 = new Three_fragment();
                    getSupportFragmentManager().beginTransaction().replace(R.id.frame, f3).commit();
                }

                if (i == R.id.four) {

                    Four_fragment f4 = new Four_fragment();
                    getSupportFragmentManager().beginTransaction().replace(R.id.frame, f4).commit();
                }

                if (i == R.id.five) {
                    Map_fragment f5 = new Map_fragment();
                    getSupportFragmentManager().beginTransaction().replace(R.id.frame, f5).commit();
                   // startActivity(new Intent(MainActivity1.this, MapActivity.class));


                }

            }

        });

        mBottomBar.mapColorForTab(0, "#c92029");
        mBottomBar.mapColorForTab(1, "#c92029");
        mBottomBar.mapColorForTab(2, "#c92029");
        mBottomBar.mapColorForTab(3, "#c92029");
        mBottomBar.mapColorForTab(4, "#c92029");

        // seems this is  working to highlist tab
        mBottomBar.selectTabAtPosition(0, true);


        // Loading first Fragment to FrameLayout manually
        First_fragment f1 = new First_fragment();
        getSupportFragmentManager().beginTransaction().replace(R.id.frame, f1).commit();


    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        mBottomBar.onSaveInstanceState(outState);
    }

    @Override
    public boolean onCreateOptionsMenu (Menu menu) {
    getMenuInflater().inflate(R.menu.menu_admin,menu);


    return true;
}

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {


        int id = item.getItemId();
        if (id == R.id.share) {


            Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
            sharingIntent.setType("text/plain");
            String shareBody = "Descárgate ya la App  ";
            sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here");
            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
            startActivity(Intent.createChooser(sharingIntent, "Share via"));

        }
        return super.onOptionsItemSelected(item);
    }
}

ERROR:

E/AndroidRuntime: FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #7: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.prueba.rudeboys.rudeboys1.Map_fragment.onCreateView(Map_fragment.java:30)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2074)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:532)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5317)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f0c0075, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment
at android.app.Activity.onCreateView(Activity.java:4921)
at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:36)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:686)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:752) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
at com.prueba.rudeboys.rudeboys1.Map_fragment.onCreateView(Map_fragment.java:30) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2074) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758) 

activity_map.xml :

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

Preguntado por: Rf Mvs

Comunidad

hago referencia a una pregunta de StackOverFlow en ingles

Inflating class mapfragment

Donde dice que debes cambiar en tu activity_map.xml

android:name="com.google.android.gms.maps.MapFragment"

Por

android:name="com.google.android.gms.maps.SupportMapFragment"

La diferencia entre MapFragment y SupportMapFragment es que esta ultima trabaja con APIs inferiores a 10 y tambien superiores a 11.

Tambien otro cambio que debes considerar es que debes cambiar el casteo que haces para tu MapFragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager().findFragmentById(R.id.mapid);
    mapFragment.getMapAsync(this);
}

Eso lo dejo referencia a un error similar al tuyo, por otro lado y por comentario mio creo que si sales de tu mapa y despues vuelves a entrar, tambien seria una muy buena opcion llamar a onDestroyView()

@Override
public void onDestroyView() {
    Fragment fragment = (Fragment) getFragmentManager().findFragmentById(R.id.mapid);        
    if (fragment  != null) {
        getFragmentManager().beginTransaction().remove(fragment).commit();
    }
    super.onDestroyView();   
}     

Fuente

Related Posts:

Girar Rectángulo con LibGDX – android libgdx
Pregunta: Estoy haciendo un programilla de prueba que se compone de : 4 botones , arriba, abajo, izquierda y derecha. Una nave espacial, formada por un ...
Botones con android y LibGDX – android libgdx
Pregunta: Buenas, he creado un pequeño boton en android, con libGDX muy sencillo, pero el problema es el siguiente: Le tengo asignada una funcion que escribe ...
¿Location manager Android? Experiencias – android mysql android-studio
Pregunta: He desarrollado una aplicación Gps que envía información a Mysql cada 10 seg atraves de locationmanager. ¿Según su experiencia hasta cuanto es posible disminuir ...
Tomcat no encuentra los recursos – java angularjs http
Pregunta: Bueno tengo una aplicación con AngularJS que hace peticiones al API de gitHub como un ejemplo para aprender a usar AngularJS, pero el problema ...
Crear cuenta regresiva N segundos mientras se visualiza una Activity en Android – java android
Pregunta: Quiero implementar una cuenta regresiva de N segundos, que se inicie cuando la Activity se muestre, se pare el contador cuando el usuario decide ...
Crear prototipos para aplicaciones Android – android prototipos
Pregunta: estoy interesado en optar por una herramienta que me sea bastante util para poder realizar prototipos de aplicaciones móviles, especificamente para Android. Empece buscando ...
¿Como Se Instala Un Apk Y Como Se Ve Despues? – android
Pregunta: Tengo una duda sobre que pasa con ese archivo apk una vez instalado si se queda como uno solo o se separa en fragmentos ...
¿Como usar la clase Intent para mostrar las apps del usuario – android android-intent
Pregunta: Quiero que mi app muestre las aplicaciones del usuario en un ListView. He tratado de investigar y me salio en ingles la mención a esta ...
Calcular distancia entre dos coordenadas android – android
Pregunta: quisiera saber como puedo hallar la distancia entre 2 coordenadas en kilómetros en trayecto vía automóvil, estoy usando la API de google maps. Agradezco cualquier ...
¿Es legal leer imágenes y descripciones de otro sitio web y ponerlas en mi app? – java woocommerce
Pregunta: ¿Es legal leer imágenes y descripciones de otro sitio web y ponerlas en mi programa? Supongamos que quiero hacer una aplicación como la de ebay, ...
Problema con consulta JPQL + JPA + JSF + EJB – java jsf jpa
Pregunta: @Override public Usuario iniciarSesion(Usuario us){ Usuario usuario = null; String consulta; try { ...
No encuentra el audio dentro de src – java
Pregunta: Tengo una carpeta "audios" dentro de "src", para cuando construya el proyecto pueda reproducir los audios. Intento abrir el audio pero me salta "java.lang.NullPointerException" ...
¿Cómo puedo crear una aplicación Android que no se pueda cerrar así como WhatsApp? – android android
Pregunta: Esta pregunta ya tiene una respuesta aquí: ...
¿Como saber con Apache POI y java si una columna en excel esta oculta? – java apache-poi
Pregunta: Hola estoy importando archivos excel con extensión xls y xlsx pero mi duda es como poder detectar si la columna de una celda esta ...
Spinner y EditText – java android
Pregunta: Tengo este código para cargar un spinner con datos de una base de datos: private class Getfrutas extends AsyncTask<Void, Void, Void> { ...

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *