entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Uso de fragments en Android Studio

Buenas, estoy desarrollando una App, que al ejecutarla aparece un LaunchScreen donde obtengo con AsynTask datos para mostrarlo en la primera pantalla.

Hasta ahí todo bien. El problema es el siguiente: tengo un DrawerLayout en el layout de la actividad Inicio como éste:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MyActivity"
    android:orientation="vertical"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        app:theme="@style/ToolbarTheme"
        app:popupTheme="@style/Theme.AppCompat"/>

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <include layout="@layout/content_inicio" />
        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <ListView
            android:id="@android:id/list"
            android:background="@android:color/white"
            android:layout_width="305dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"/>
    </android.support.v4.widget.DrawerLayout>

</LinearLayout>

Ahí estoy incluyendo otro layout, donde muestro información, la cuál he pasado a través del 'LaunchScreen', pero quiero que todas las ventanas sean Fragments, para que cuando selecciones un elemento de la lista del DrawerLayout, me vaya cambiando entre mis diferentes Fragments. Así que estoy teniendo problemas con esto, ya que cargo información de la BD externa y según el elemento del DrawerLayout hace consultas a diferentes URLs.
Tengo 2 Fragments para probarlo y cuando hace click en otro elemento del DrawerLayout, lo que hace es ponerme el nuevo Fragment encima del otro.

Así son los Fragments:

@SuppressLint("NewApi")
public class FragmentInicio extends Fragment {

    View rootView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.content_inicio, container, false);
        return rootView;
    }
}

Espero que me entendáis lo que quiero hacer.

0voto

x4mp73r comentado

Que tal @danielreales7 te lo pongo en un comentario porque no es una respuesta como tal, creo que el DrawerMenu que usas es el que trae por defecto Android ¿No es así?, mira, cuando use por primera vez Drawer igual me enfrenté a eso y sí hay una solución, pero no me quise a inclinar a buscarla, por si no encuentras una solución adecuada a tu problema, te sugiero que te pases por estos links:
link1
link2
link3
A mi parecer está mas claro y puedes modificarlo a tu gusto sin tener que lidiar con este tipo de problemas.
Saludos.

0voto

danielreales7 comentado

Ahora estoy teniendo un problema, en el LaunchScreen mando a la actividad primera, en la cual hago lo siguiente:

if (savedInstanceState == null) {
            getFragmentManager()
                    .beginTransaction()
                    .add(R.id.content_frame, new FragmentInicio())
                    .commit();
        }

Para que me carge el fragment primero, en este fragment tengo lo siguiente:

@SuppressLint("NewApi")
public class FragmentInicio extends Fragment {

    View rootView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.content_inicio, container, false);
        //String jornada = this.getArguments().getString("jornada");
        Bundle bundle = getArguments();
        TextView lastMatch = (TextView) rootView.findViewById(R.id.lastMatch);
        lastMatch.setText(bundle.getString("jornada"));
        return rootView;
    }
}

Pero siempre me devuelve null, cuando obtengo jornada. ¿Qué puedo estar haciendo mal aquí?

0voto

x4mp73r comentado

¿Podrías colocar el output con los errores?

0voto

danielreales7 comentado

FATAL EXCEPTION: main Process: com.oficial.udrotena, PID: 1032 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.oficial.udrotena/com.oficial.udrotena.Inicio}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.oficial.udrotena.FragmentInicio.onCreateView(FragmentInicio.java:27) at android.app.Fragment.performCreateView(Fragment.java:1700) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) at android.app.BackStackRecord.run(BackStackRecord.java:684) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) at android.app.Activity.performStart(Activity.java:5240) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2157) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  at android.app.ActivityThread.access$800(ActivityThread.java:135)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5001)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515) 
Ese es el error, yo creo que sé que está pasando, aunque no estoy seguro. Yo paso del LaunchScreen los datos al MainActivity, y aquí con esto:

if (savedInstanceState == null) {
            getFragmentManager()
                    .beginTransaction()
                    .add(R.id.content_frame, new FragmentInicio())
                    .commit();
        }

Muestro el Fragment, entonces en el fragment es donde estoy obteniendo los datos y me están llegando como null. Tendría que obtenerlos en el MainActivity y de ahí mandarlos al Fragment, no crees?

0voto

danielreales7 comentado

Nada, sigue devolviendome null. Nunca me obtiene los datos a través del Bundle.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta