jarroba com programar fragments fragmentos en android

Upload: canche-josue

Post on 13-Oct-2015

270 views

Category:

Documents


0 download

TRANSCRIPT

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    | INICIO | ENTRADAS | FORO | FAQ | VISITAS |

    Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Al navegar por esta web aceptas nuestra politica de cookies Ver FAQ

    Jarroba.com | No importa la edad que tengas, si mantienes el deseo de ser creativo no envejeceras - John Cassavetes

    Ricardo Moya

    Ayudanos a continuar con tusdonaciones

    Ramn Invarato

    Programar Fragments (fragmentos) en Android

    Despus del primer artculo (ver primera parte aqu), continuamos donde lo dejamos y preparados para programar. Comenzar con una descripcin ilustrada para que no quepan

    dudas, o al menos sean mnimas. Continuemos donde lo dejamos.

    Retomamos el ejemplo para disear el Smartphone. Veamos que tendremos una Activity con un listado que representaremos el diseo como:

    Distinguir lo verde como Fragment y lo rojo como Activity. El resto de contenido pertenece al Layout (texto, imgenes, etc).

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Y un al pulsar sobre un elemento de la lista, nos abrir una segunda Activity que ser el detalle de la entrada:

    Ahora un par de preguntas sobre la representacin del detalle de la entrada (la imagen anterior), para ver si has entendido la teora Cuntos Layouts, es decir, ficheros XML de la

    carpeta Layout, componen esta Activity? Y dnde estaran ubicados? La solucin es 2 Layouts, y estn ubicados donde se muestra en la imagen a continuacin (la letra ms pequea

    en negrita con rectngulo transparente):

    Si no has acertado, no te preocupes, a continuacin lo explico. Si has dado con la solucin a la primera, me quito el sombrero, ya que has entendido la complejidad de las vistas de los

    Fragments.

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    La Activity tiene asociado un Layout como siempre, que llamaremos Layout_activity_detalle (engloba todo el rectngulo rojo) es la asociacin Layout con Activity tpica. Y hemos

    dicho que el Fragment es como si fuera una Activity pero pequea, con lo que tambin tiene asociado un Layout que llamamos Layout_fragment_detalle. Espero que los nombres

    sean acertados y aclaratorios

    Hemos dejado para el final el primero, porque tiene una particularidad. Si te hago las dos preguntas anteriores Dnde y cuntos Layouts componen el listado? Podras decirme que 3,

    pero no son 3 sino 2. Fjate en la siguiente imagen un segundo y te lo explico.

    La actividad tiene, como acostumbra, su Layout asociado llamado Layout_activity_principal_listado. El Fragment no tiene fichero de Layout asociado No me acabas de decir que

    s tena Layout, adems, es el fichero XML tiene un ListView claramente? En Fragments el listado es un caso especial. Si has tocado listas un poco ms en profundidad sabrs que si

    extendemos la clase, en vez de con Activity con ListActivity, no hace falta declarar un fichero con el ListView. Con Fragments es igual si extendemos de ListFragment. Usaremos este

    modo por simplificar cdigo. Y aclarar que en este Fragment existir existe el Layout con el ListView, pero no lo haremos nosotros directamente. Ya terminamos con el ltimo Layout,

    el de cada elemento de la lista llamado Layout_elemento_listado.

    Aqu acaba el diseo para dispositivos mviles.

    Ahora el de la Tablet en el que me explayar menos en detalles, pasando a lo importante. Recordamos que queremos que todo se muestra a la vez (listado y detalle).

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Notars cmo estn separados los dos Fragments y que solo necesitamos una Activity. Tambin te hago las mismas preguntas anteriores sobre los Layouts Cuntos y dnde estn

    ubicados? Esta es fcil habindolo visto anteriormente.

    Bueno, exista una trampa al tratarse de una sola Activity. En el diseo de mvil cada actividad tena un Layout que contena un Fragment. En el diseo para Tablets, solo existe una

    Activity que tiene asociado un Layout que contiene a los dos Fragments. Es razonable que sea as; quera dejar clara esta diferencia.

    Por cierto, estos van a ser todos los Layouts que vamos a utilizar y ninguno ms (todos los has visto en las imgenes anteriores):

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Ya llega el cdigo, tranquilo. Es importante no perderse con tanto archivo y tener las ideas muy claras.

    Previo a revelarte el cdigo XML, hay un simplismo que debes conocer. Se suele pasar por alto y no debera, es fuente de muchos errores, por consiguiente se obtiene desesperacin

    al tratar con Fragments (ya nunca ms ). El tema de Fragments estticos o finales y dinmicos:

    Un Fragment esttico o final es aquel que se declara en el fichero XML de la carpeta Layout directamente. Este Fragment tendr la cualidad de no ser eliminado o sustituido

    por nada -De lo contrario tendremos errores.

    Un Fragment dinmico es el que se crea desde cdigo Java y se asocia a un ViewGroup (Se recomienda el uso de FrameLayout). ste s que se podr eliminar o sustituir por

    otro Fragment u otro contenido.

    Para entenderlo bien, con el ejemplo del Tablet nos bastar.

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Tenemos el listado, que es algo que siempre va a ser igual (podrn aumentar o disminuir los elementos contenidos en el listado, pero siempre ser un listado), por lo que podemos

    declarar su fragment en el XML, es esttico. Y luego tenemos la parte derecha del detalle, dependiendo del seleccionado en el listado mostrar el detalle de un pjaro (descripcin,

    nombre y foto) diferente. Con lo que cada detalle de cada pjaro tendr su propio Fragment -si los equiparamos a las hojas de un libro, pasar cada Fragment equivaldra a pasar las

    hojas del libro de pjaros- por lo que nos interesa que estos Fragments sean dinmicos. Lo que nos dibujar el siguiente Layout con un Fragment esttico en XML y un FrameLayout

    que contendr a los Fragments dinmicos.

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Por lo que el cdigo de layout_activity_principal_dospaneles.xml ser:

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Del mismo modo, para mvil, tenemos por separado el listado con el Fragment esttico. Cuyo cdigo de layout_activity_principal_listado.xml es:

    Y por otra parte, de manera separada pero con la misma lgica al que hemos explicado de la Tablet, tenemos el Fragment dinmico para el detalle. Para

    layout_activity_detalle.xml:

    Tambin tenemos la estructura simple de la vista de cada elemento del listado en layout_elemento_listado.xml:

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    android:contentDescription="Descripcin del contenido de la imagen" android:src="@android:drawable/ic_menu_gallery" />

    Y el del detalle, en layout_fragment_detalle.xml:

    Ya tenemos las vistas. Antes de entrar con Java, tenemos que hacer una diferenciacin ms. Necesitamos diferenciar con qu tipo de pantalla estamos tratando para poder

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    aplicar el diseo de mvil o de tablet. Esta diferenciacin Android la hace muy bien gracias a las carpetas values, que estn en la carpeta res.

    Tendremos 3 carpetas values (ms informacin en http://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts):

    values-large: para pantallas grandes; es decir, para Tablets (Necesario para que funcione en la versin 3 de Android). Crearemos en esta carpeta un nuevo fichero XML llamado

    layout.xml (lo explico un poco ms adelante).

    values-sw600dp: para pantallas con un ancho mayor a 600dp (independientemente de la rotacin de la pantalla); para Tablets de este tamao o ms. Este valor lo podemos

    cambiar, pero 600 nos va a funcionar muy bien para nuestros propsitos. Crearemos en esta carpeta otro nuevo fichero XML tambin llamado layout.xml (lo explico un poco

    ms adelante).

    values: carpeta de valores para el resto de dispositivos que no cumplan las condiciones anteriores. Lo usaran los Smartphones, o las Tablets pequeas que no cumplan el tamao

    mnimo que hemos puesto. No tocamos ni aadimos nada en esta carpeta.

    Hemos creado dos ficheros llamados layout.xml. Ambos contendrn el mismo contenido que es el siguiente:

    @layout/layout_activity_principal_dospaneles

    Esto es un truquito que te cuento para no repetir ficheros: los alias. Podramos haber creado varias carpetas layout pero tendramos cdigo duplicado con lo mismo; con el alias

    evitamos repetir cdigo innecesariamente. Este alias lo nico que hace es sustituir el contenido de un XML por otro. As, si la pantalla es pequea cargar directamente el XML

    layout_activity_principal_listado.xml en el que solo se muestra un listado; y si es grande, el contenido de este fichero ser sustituido por el contenido del fichero

    layout_acitivity_principal_dospaneles.xml que dispone un Fragment a la izquierda para el listado y un FrameLayout a la derecha para el Fragment dinmico del detalle. Para mayor

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    claridad, echa un vistazo a la imagen siguiente:

    Ahora ya podemos meternos de lleno con el cdigo Java. Primero te voy a mostrar la estructura completa del proyecto, debers crear las clases Java (que detallo a continuacin) y

    aadir las imgenes. De la carpeta res ya est todo terminado. De la siguiente imagen solo hemos creado lo que est en rojo para hacer la aplicacin.

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Empecemos por el cdigo primero en ejecutarse, que es Activity_Principal.java. Esta es una Activity, pero para tratar con Fragments necesitamos un tipo de Activity especial

    llamada FragmentActivity de la que extenderemos la clase. Pero antes vamos a explicar en esencia lo que hace, que son dos cosas y luego muestro el cdigo:

    1. Diferenciar la cantidad de elementos que maneja para cada tipo de dispositivo: En el onCreate le asociaremos el Layout layout_activity_principal_listado.xml recordemos

    que su contenido tendr nicamente un listado, o un listado y un detalle, dependiendo del tamao de la pantalla. Para saber si estamos trabajando con dos Fragments en la misma

    Acitivity, es tan sencillo como preguntar si existe el detalle, sino existe estaremos trabajando con un solo Fragment que ser sin lugar a dudas el listado.

    2. Comunicar a los Fragments: Programaremos los Fragments de manera completamente modular; es decir, un Fragment no se comunica con otro directamente sino a travs de

    interfaces. Funciona del siguiente modo (para mayor claridad, echar un vistazo a la imagen inferior que es para el caso del Tablet; para el Smartphone sera igual, pero pasndole

    el dato de una Activity a la otra, y sta ya se lo comunicara al Fragment con el detalle):

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    1) Se pulsa sobre un elemento del Fragment que contiene al listado. A travs de un mtodo de Callback onEntradaSelecionada (esto es programacin por eventos, en este

    artculo explicamos su comportamiento, pero resumimos al explicar el cdigo por no ser el tema principal del artculo) comunica el id de la entrada seleccionada a la Activity que lo

    engloba (de ah que implemente a Fragment_Lista.Callbacks).

    2) La Activity recoge el dato. Si:

    Es Tablet: crea un nuevo Fragment con el detalle, le enva el id para que cargue el contenido apropiado y lo coloca en el FrameLayout, remplazando cualquier otro Fragment con

    el detalle que pueda existir.

    Es Smartphone: Crea una nueva Activity al que le enva el id. La nueva Activity cargar el Fragment con el detalle sobre s misma.

    3) Se muestra el Fragment con el detalle al usuario.

    Y este es el cdigo correspondiente de esta clase:

    public class Activity_Principal extends FragmentActivity implements Fragment_Lista.Callbacks {

    private boolean dosFragmentos;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_activity_principal_listado);

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    if (findViewById(R.id.framelayout_contenedor_detalle) != null) { dosFragmentos = true; } }

    @Override public void onEntradaSelecionada(String id) { if (dosFragmentos) { Bundle arguments = new Bundle(); arguments.putString(Fragment_Detalle.ARG_ID_ENTRADA_SELECIONADA, id); Fragment_Detalle fragment = new Fragment_Detalle(); fragment.setArguments(arguments); getSupportFragmentManager().beginTransaction().replace(R.id.framelayout_contenedor_detalle, fragment).commit();

    } else { Intent detailIntent = new Intent(this, Activity_Detalle.class); detailIntent.putExtra(Fragment_Detalle.ARG_ID_ENTRADA_SELECIONADA, id); startActivity(detailIntent); } }}

    Comencemos con un Fragment normal, que es el del detalle. Para ello escribimos el cdigo de Fragment_Detalle.java. Por ser un Fragment normal y corriente extender de

    Fragment. Explico el contenido de los mtodos:

    Contructor: en los Fragments siempre vaci para poder instanciarlo.

    onCreate: recoge el contenido de la entrada.

    onCreateView: aqu se maneja la vista, es decir crea y se asocia con el Layout (en Activity se hace en el onCreate con el mtodo setContentView; pero esto es un Fragment,

    funciona de manera diferente y es as como se hace, con inflate(). Averigua todo sobre inflate() en este otro artculo).

    public class Fragment_Detalle extends Fragment {

    public static final String ARG_ID_ENTRADA_SELECIONADA = "item_id"; private Lista_contenido.Lista_entrada mItem;

    public Fragment_Detalle() { }

    @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    if (getArguments().containsKey(ARG_ID_ENTRADA_SELECIONADA)) { //Cargamos el contenido de la entrada con cierto ID seleccionado en la lista. Se recomiendo usar un Loader para cargar el contenido mItem = Lista_contenido.ENTRADAS_LISTA_HASHMAP.get(getArguments().getString(ARG_ID_ENTRADA_SELECIONADA)); } }

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

    //Mostramos el contenido al usuario if (mItem != null) { ((TextView) rootView.findViewById(R.id.textView_superior)).setText(mItem.textoEncima); ((TextView) rootView.findViewById(R.id.textView_inferior)).setText(mItem.textoDebajo); ((ImageView) rootView.findViewById(R.id.imageView_imagen)).setImageResource(mItem.idImagen); }

    return rootView; }}

    Exporto android.support.v4.app o android.app?

    A la hora de exportar la librera de Fragment (por ejemplo, aunque tambin podra darse el caso con FragmentManager, FragmentTransaction, etc). Eclipse te dar a elegir entre las

    dos opciones dos: android.app.Fragment -solo funciona a partir de Android 3.0 nivel 11- o android.support.v4.app.Fragment -para cualquier versin de Android.

    Nuestra recomendacin es que uses android.support.v4.app.*.

    Nunca mezcles en el mismo proyecto las dos libreras a importar (por ejemplo, que hayas importado android.support.v4.app.FragmentManager y android.app.Fragment ), pues lo

    ms probable es que te encuentres con alguna variante del siguiente error en tiempo de ejecucin:

    The method replace() in the type FragmentTransaction is not applicable for the arguments ()

    La solucin ya sabes que debes hacer: buscar y cambiar el archivo importado que no cumple lo anterior descrito y cambiarlo por el otro (en el anterior ejemplo, nos damos cuenta y

    lo cambiamos a android.support.v4.app.FragmentManager y android.support.v4.app.Fragment ).

    Entendido el Fragment normal, ahora uno especial. Implementaremos el del listado en Fragment_Lista.java. Esta clase es un Fragment, pero es un Fragment especial que extender

    de ListFragment, que es el listado preparado para ser Fragment (Aqu no asociamos ningn Layout, pues al extender de ListFragment ya lo trae puesto). Callaback: Tendr

    implementado el Callback que notifique a la Activity de que elemento del listado se haya pulsado. Explico uno a uno los mtodos aqu usados:

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Constructor: Seguro que te fijars en el constructor vaco, es necesario para el correcto funcionamiento de los Fragments, as que ni se te ocurra quitarlo :D.

    onCreate: como ya hicimos en el artculo de listado asignamos el contenido de cada entrada a cada elemento del listado.

    onAttach: Simplemente asegura que el desarrollador haya implementado el Callback, en la clase que use a este Fragment.

    onDetach: Limpia el Callback.

    onListItemClick: al extender de ListFragment, es necesario sobrescribir esta clase, que es la que escucha la pulsacin sobre un elemento de la lista. Y as usaremos el Callback

    para notificar a la Actividad del id pulsado.

    public class Fragment_Lista extends ListFragment {

    private Callbacks mCallbacks = CallbacksVacios;

    public interface Callbacks { public void onEntradaSelecionada(String id); }

    private static Callbacks CallbacksVacios = new Callbacks() { @Override public void onEntradaSelecionada(String id) { } };

    public Fragment_Lista() { }

    @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

    setListAdapter(new Lista_adaptador(getActivity(), R.layout.layout_elemento_listado, Lista_contenido.ENTRADAS_LISTA){ @Override public void onEntrada(Object entrada, View view) { if (entrada != null) { TextView texto_superior_entrada = (TextView) view.findViewById(R.id.textView_titulo); if (texto_superior_entrada != null) texto_superior_entrada.setText(((Lista_contenido.Lista_entrada) entrada).textoEncima);

    ImageView imagen_entrada = (ImageView) view.findViewById(R.id.imageView_imagen_miniatura); if (imagen_entrada != null) imagen_entrada.setImageResource(((Lista_contenido.Lista_entrada) entrada).idImagen); } } });

    }

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    @Override public void onAttach(Activity activity) { super.onAttach(activity);

    if (!(activity instanceof Callbacks)) { throw new IllegalStateException("Error: La actividad debe implementar el callback del fragmento"); }

    mCallbacks = (Callbacks) activity; }

    @Override public void onDetach() { super.onDetach(); mCallbacks = CallbacksVacios; }

    @Override public void onListItemClick(ListView listView, View view, int posicion, long id) { super.onListItemClick(listView, view, posicion, id); mCallbacks.onEntradaSelecionada(Lista_contenido.ENTRADAS_LISTA.get(posicion).id); }

    }

    Hasta aqu ya tenemos lo que hace funcionar la estructura de los Tablets.

    Continuemos para el caso de Smartphone. Necesitamos un segundo Activity para contener al Fragment del detalle. Llamaremos Activity_Detalle. Recuerdas que heredaba? A

    Activity no, estamos trabajando con Fragments, extiende de FragmentActivity. Solo tiene un mtodo onCreate que comprobar si ya ha creado al Fragment del detalle para cargarlo,

    o no para crearlo. La creacin del Fragment del detalle es igual que en el caso de Activity_Principal.java.

    public class Activity_Detalle extends FragmentActivity {

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_activity_detalle);

    // Comprobamos que previamente no hayamos entrado en esta actividad (por ejemplo, al rotar el dispositivo). Si es as se aade el fragmento al contenedor if (savedInstanceState == null) { // Crea el fragmento del detalle de la entrada y lo aade a la actividad Bundle arguments = new Bundle(); arguments.putString(Fragment_Detalle.ARG_ID_ENTRADA_SELECIONADA, getIntent().getStringExtra(Fragment_Detalle.ARG_ID_ENTRADA_SELECIONADA));

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Fragment_Detalle fragment = new Fragment_Detalle(); fragment.setArguments(arguments); getSupportFragmentManager().beginTransaction().add(R.id.framelayout_contenedor_detalle, fragment).commit(); } }

    }

    Ya solo nos queda comentar Lista_adaptador.java que encontrars en el artculo del listado.

    Y Lista_contenido.java, que contiene a la clase Lista_entrada del artculo del listado. Lo hemos hecho as por simplificar el cdigo. Ya que si los datos no van a cambiar, as es muy

    fcil hacer una estructura esttica que de elementos que siempre est visible por todas las clases sea el momento que sea de la ejecucin. Simplemente guardamos unos listados con el

    contenido de las entradas estticamente, esto se hace al inicio de la aplicacin.

    public class Lista_contenido {

    /** * Donde se guardan las entradas de la lista. */ public static ArrayList ENTRADAS_LISTA = new ArrayList();

    /** * Donde se asigna el identificador a cada entrada de la lista */ public static Map ENTRADAS_LISTA_HASHMAP = new HashMap();

    /** * Creamos estticamente las entradas */ static { aniadirEntrada(new Lista_entrada("0", R.drawable.im_buho, "BUHO", "Bho es el nombre comn...")); aniadirEntrada(new Lista_entrada("1", R.drawable.im_colibri, "COLIBR", "Los troquilinos (Trochilinae) son...")); aniadirEntrada(new Lista_entrada("2", R.drawable.im_cuervo, "CUERVO", "El cuervo comn (Corvus corax) es ...")); aniadirEntrada(new Lista_entrada("3", R.drawable.im_flamenco, "FLAMENCO", "Los fenicopteriformes...")); aniadirEntrada(new Lista_entrada("4", R.drawable.im_kiwi, "KIWI", "Los kiwis (Apterix, gr. 'sin alas') son...")); aniadirEntrada(new Lista_entrada("5", R.drawable.im_loro, "LORO", "Las Psitcidas (Psittacidae) son...")); aniadirEntrada(new Lista_entrada("6", R.drawable.im_pavo, "PAVO", "Pavo es un gnero de aves...")); }

    /** Aade una entrada a la lista * @param entrada Elemento que aadimos a la lista */ private static void aniadirEntrada(Lista_entrada entrada) { ENTRADAS_LISTA.add(entrada);

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    ENTRADAS_LISTA_HASHMAP.put(entrada.id, entrada); }

    /** * Representa una entrada del contenido de la lista */ public static class Lista_entrada { public String id; public int idImagen; public String textoEncima; public String textoDebajo;

    public Lista_entrada (String id, int idImagen, String textoEncima, String textoDebajo) { this.id = id; this.idImagen = idImagen; this.textoEncima = textoEncima; this.textoDebajo = textoDebajo; } }

    }

    Y nos falta aadir al AndroidManifest.xml la Actividad que no es la principal, es decir Activity_Detalle. Este es mi AndroidManifest:

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Dejo aqu el cdigo funcional para descargar, bastante comentado para aclarar todava ms las posibles dudas que queden en el tintero. Descrgalo aqu: Fragmentos

    Te recomiendo que lo pruebes tanto con un emulador o dispositivo fsico- de Smartphone, como de Tablet, para que veas como queda en cada dispositivo.

    Nota: si quieres ahorrarte un montn de cdigo aprovechando ahora que entiendes la arquitectura de los Fragments. Al crear un nuevo proyecto Android puedes seleccionar

    Master/Detail Flow en la pgina Create Activity. Lo nico que, como usa ActionBar, requiere de mnimo Android 3.0 (API 11 o Honeycomb).

    Y con esto acabamos los fragmentos. La estructura mental de Fragment tiene cosas que ver y cosas que son completamente diferentes a la de Activity. Una vez entendidas te aseguro

    que son muy fciles

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Programar Fragments (fragmentos) en Android por "www.jarroba.com" esta bajo una licencia Creative Commons

    Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.

    Creado a partir de la obra en www.jarroba.com

    44 Comentarios de Programar Fragments (fragmentos) en Android

    Comparte esta entrada en: 7

    ENTRADA PUBLICADA EL: 19/agosto/2013

    CATEGORIA: Aplicaciones Mviles

    Entradas Relacionadas

    ListView de Android en pocas

    lneas

    AsyncTask en Android Expansin al ListView o listado

    en Android

    Atributos para diseadores

    Android (tools:xxxxx)

    Pablo

    Hola Ramn, excelente tutorial.

    Tengo una duda, quera hacer una pequea aplicacin mediante un Navigation Drawer con Fragments.

    Mediante el navigation selecciono diferentes sub-aplicaciones las cuales no tienen mucha relacin (aunque si comparten alguna variable) y sus layouts seran diferentes.

    Si comienzo desde el Android Studio para que genere la app con el navigation y fragment, parece ser que genera un solo fragment comn llamado fragment_main.xml.

    Entiendo que ese fragment es comn para todas las entradas del navigation y dinamicamente se creara dentro de el otro fragment mediante el

    PlaceholderFragment.newInstance del mtodo onNavigationDrawerItemSelected por lo cual no me sirve y debera eliminar el PlaceholderFragment y crear yo los

    fragments manualmente y poder seleccionarlos con un switch.

    Espero haberme explicado, estoy hecho un lo. Muchas gracias.

    28 mayo, 2014 a las 16:40

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    RESPONDER

    Ramn [Admin Jarroba]

    Buenas Pablo,

    el Fragment fragment_main.xml no es un Fragment comn, es un Fragment Hello Word!. Es decir, que sirve para empezar a programar y hacer lo que

    quieras con l.

    Para el Navigation Drawer lo nico que tienes que hacer es modificar de este artculo los dos layout_activity_principal_xxxxx.xml, y cambiarlos a tu gusto por el

    xml que figura en el tutorial oficial de Android de este link (el que tiene de tag padre ): https://developer.android.com/training/implementing-navigation/nav-

    drawer.html. Ya el resto es fcil

    RESPONDER

    28 mayo, 2014 a las 20:06

    Pablo

    Gracias Ramn, muy amable!

    RESPONDER

    29 mayo, 2014 a las 7:50

    Pablo

    Ya he conseguido que aparezca el fragment correspondiente en funcin del elemento seleccionado del Navigator, gracias por tu aclaracin.

    La duda que quizs no he expuesto bien antes es, si ahora para cada sub-aplicacin seleccionada (e independiente de las dems) me basta con el

    fragment correspondiente o tengo que crear una activity.

    Esto es lo que me confunde, cuando se usa Fragment o Activity.

    Muchas gracias.

    RESPONDER

    29 mayo, 2014 a las 11:18

    Ramn [Admin Jarroba]

    Lo s, lo s, al principio es un poco lioso de entender la diferencia entre Activity y Fragment. Pero ya vers como todo queda muy claro

    En definicin rpida, una Activity ocupa toda la pantalla y un Fragment una porcin de una Activity.

    29 mayo, 2014 a las 20:11

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Por esto (puedes ir siguiendo el cdigo de las vistas) y como ejemplo: cuando se utiliza Navigation Drawer, este se sita sobre una

    Activity, y junto a este men se ubica un hueco para el Fragment que ser lo que tenga que cambiar (sobre el FrameLayout). Es decir, el

    cajn del men estar en la misma pantalla que lo que ste cambie, por lo que todo en la misma Activity.

    Espero que quede un poco ms claro.

    Mara

    Hola Ramn, muy buena vuestra publicacin!! Todo muy claro

    Os cuento mi problema a ver si alguien me puede echar una mano ya que ando algo perdida en el uso de fragmentos. Estoy creando una app la cual tiene una Activity con

    un men del tipo DrawerLayout y quiero que cuando se pulse una opcin de este men aparezca un listado de este tipo, el problema es que al hacer esto se debe crear un

    fragment pudiendo hacer la transicin mediante:

    FragmentManager fragmentManager = getFragmentManager();

    getFragmentManager().beginTransaction().replace(R.id.activityPrincipal,fragment).commit();

    Pero aqu la clase principal es un FragmentActivity y no puedo hacer la transicin entre el Activity que contiene el men y esta clase ya que el mtodo

    getSupportFragmentManager().beginTransaction() (utilizando la librera android.support.v4.app) se utiliza en FragmentActivity y no en Activity.

    Alguien sabra como puedo solucionar este problema?

    Muchas gracias de antemano!

    Un saludo, Mara.

    RESPONDER

    22 mayo, 2014 a las 8:53

    Ramn [Admin Jarroba]

    Buenas Mara,

    No me queda muy claro que necesitas, puede que hayas mezclado conceptos. FragmentActivity es lo mismo que una Activity para las versiones antiguas de

    Android, por lo que se comporta igual que Activity pudiendo utilizar startActivity() para la transicin de Activities. FragmentManager es solo para Fragments. Si

    ves que no te quedan claros los conceptos, te recomiendo que antes lo programes a un nivel del API de 11 con la biblioteca de android.app y que una vez te

    22 mayo, 2014 a las 22:10

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    funcione ya cambies las partes. Ms que nada, porque no existe FragmentActivity y puedes utilizar Activity normal, para que no te tengas que preocupar y

    funciona mucho mejor, luego realizar el cambio no es difcil (siempre que la biblioteca de soporte lo permita).

    Y ya sabes que te echaremos las manos que hagan falta

    RESPONDER

    David lopez

    Buen articulo de fragmentos, describo a continuacin el problema que tengo con respecto a tomar una cadena desde los recursos en este caso string.xml.

    Ya dentro del archivo Lista_contenido.java

    quiero llamar a esa cadena con:

    aniadirEntrada(new Lista_entrada(0, R.drawable.im_buho, BUHO, getString(R.string.ejemplotexto)));

    y es ahi donde me aparece el error Cannot make a static reference to the non-static method getString(int) from the type Context

    Saludos y gracias

    RESPONDER

    15 mayo, 2014 a las 6:39

    David lopez

    string name=ejemplotexto>

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum commodo viverra diam, eget bibendum sem tincidunt vel.

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    constructor). Adems, getString() requiere del Context de Activity y Lista_contenido.java no hereda de Activity (o bien le pasas el Context de Activity o lo haces

    todo dentro de tal).

    RESPONDER

    David lopez

    Gracias por responder, y te contare a ver que pasa Saludos!!!!!!!!!!!!!

    RESPONDER

    15 mayo, 2014 a las 20:50

    Fernan

    Buen tuto, sobre todo para los no expertos como yo.

    Tengo el siguiente fragment (con varias imgenes) que proviene del men:

    import android.annotation.SuppressLint;

    import android.app.Fragment;

    import android.content.Intent;

    import android.os.Bundle;

    import android.view.LayoutInflater;

    import android.view.View;

    import android.view.ViewGroup;

    import android.widget.ImageView;

    import android.widget.Toast;

    @SuppressLint(NewApi)

    public class Razas extends Fragment

    implements View.OnClickListener {

    ImageView imageAmerica;

    @Override

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

    View rootView = inflater.inflate(R.layout.continentes, container, false);

    12 mayo, 2014 a las 11:34

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    imageAmerica = (ImageView) rootView.findViewById(R.id.imageAmerica);

    imageAmerica.setOnClickListener(this);

    return rootView;

    }

    @Override

    public void onClick(View ImageView) {

    Toast.makeText(this.getActivity(),

    Has pulsado America, Toast.LENGTH_LONG).show();

    }

    }

    Hasta aqu funciona.

    Pero quiero sustituir el Toast y declarar varias imgenes (en este fragment) y que al pulsar cada una me lance a unas activity llamadas america.xml, europa.xml,etc.

    Estoy perdido

    RESPONDER

    Ramn [Admin Jarroba]

    Buenas Fernan,

    Justo lo que necesitas lo tienes en el de Activity (http://jarroba.com/activity-entender-y-usar-una-actividad/); y ya si quieres hacer un GridView con imgenes

    puedes echar un vistazo al artculo de listado (el artculo de listado (http://jarroba.com/listview-o-listado-en-android/). chales un vistazo y me cuentas, ya vers lo

    fcil que es

    RESPONDER

    12 mayo, 2014 a las 17:51

    Drey

    Buenas tardes!

    24 abril, 2014 a las 23:07

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Tremendo aporte de verdad, gracias. Tengo una duda. Si tengo un fragmentList (izquierdo), un fragmentDetail (centro) y otro fragmentList(derecho) y quisiera hacer que

    los fragmentLists laterales aparecieran con arrastrar el dedo, como lo hace facebook o Viber, cmo sera?? Me gustara algo como eso, y tambin como lo hace

    Hangouts,que el fragmentList derecho siempre est (un pedacito), luego lo termino de arrastrar con el dedo.

    Les agradecera la ayuda.

    RESPONDER

    Ramn [Admin Jarroba]

    Buenas Drey,

    El cajn con el men de navegacin lateral (Navigation Drawer) se puede utilizar directamente de una forma muy sencilla. Te recomiendo que leas el siguiente

    artculo donde tienes un ejemplo: https://developer.android.com/training/implementing-navigation/nav-drawer.html

    RESPONDER

    25 abril, 2014 a las 21:24

    Drey

    Pura vida!

    RESPONDER

    2 mayo, 2014 a las 16:03

    JeR

    Exelente Aporte!!.

    RESPONDER

    14 abril, 2014 a las 16:39

    Cristian

    Buenas, quisiera hacer otra consulta. Si lo que quisiera implementar que los detalles fueran listview. Por ejemplo, los elementos serian Continente y cada vez que elijo uno,

    se muestren en detalles, el listado de los pases que pertenecen a ese contienente. Tendra que modificar Fragment_Detalle????.

    Desde ya muchas gracias

    31 marzo, 2014 a las 23:37

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    RESPONDER

    Ramn [Admin Jarroba]

    Lo nico que tendras que hacer sera replicar el listado en Fragment_Detalle

    RESPONDER

    1 abril, 2014 a las 18:03

    Cristian

    bien, lo hice y funciono perfecto, me quedaron duplicadas las listas. Despues lo que quise hacer es modificar el contenido del listado, por ejemplo. Si

    presiono en buho, quiero que en detalles me aparezca un listado de los distintos tipos de buhos.

    por lo que antes de la linea que se llama al adaptador,

    setListAdapter(new Lista_adaptador(getActivity(), R.layout.layout_elemento_listado, Lista_contenido.ENTRADAS_LISTA)

    agrego datos a una clase que es parecida a Lista_contenido, pero no estn las entradas estaticas, es decir agrego datos de los distintos tipos de buhos.

    Pero cuando llamo esa linea, salta un error.

    mi pregunta es, el adaptador Lista_adaptador, solo funciona con variables estticas??? porque es como si no me aceptara los datos que le envio.

    Y en caso de ser otro el inconveniente, cual seria tu sugerencia para mostrar datos diferentes en los detalles?.

    Desde ya muchas gracias, y mil disculpas por algunas preguntas muy obvias, pero todavia estoy aprendiendo.

    RESPONDER

    2 abril, 2014 a las 15:10

    Ramn [Admin Jarroba]

    Lo del truco de las variables estticas de Lista_contenido.java es para simular la base de datos, descarga de internet, arrays, etc. Fjate en el

    ejemplo de http://jarroba.com/listview-o-listado-en-android/, podrs comprobar como se aaden datos dinmicos (que no son estticos).

    Este ejemplo est muy bien para aprender. Ahora que necesitas datos que vienen de otro lado, te sugiero que elimines (o modifiques) la clase

    Lista_contenido.java, pues como he dicho es una simulacin de una base de datos que debers de modificar.

    Cualquier cosa que necesites nos dices

    RESPONDER

    2 abril, 2014 a las 20:37

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Cristian

    Te agradezco mucho por tu ayuda, tenia un error simple y no lo podia ver.

    usaba la linea:

    setListAdapter(new Lista_adaptador(getActivity(), R.layout.fragment_person_detail,datos)

    donde datos es una variable local por ejemplo

    (segu tu consejo y cre una nueva clase llamada List_Entrada)

    List_Entrada datos = new ArrayList();

    datos.add(new List_Entrada(01,R.drawable.buho1,Buho,descripcion 1));

    datos.add(new List_Entrada(02,R.drawable.buho2,Buho,descripcion 2));

    cuando implementaba el adapter, el error era que en el metodo

    onEntrada(Object entrada, View view)

    nunca actualizaba la variable entrada, que al modificar mis datos es del tipo List_Entrada y ya no la del ejemplo jajaj xD. y quedara

    texto_superior_entrada.setText(((List_Entrada) entrada).textoEncima);

    bueno, gracias nuevamente. Y lo mas probable es que seguir haciendo preguntas, porque ahora me falta el tema de los listener de estas

    nuevas listas, tengo que leer el articulo de nuevo, donde explicas eso.

    gracias again xD

    3 abril, 2014 a las 23:18

    Ramn [Admin Jarroba]

    Cuenta con nuestro apoyo

    5 abril, 2014 a las 14:52

    Cristian

    Hola, primero que nada, muchas gracias por el aporte. Tengo una consulta, en Fragment_Lista.java en el cogido es:

    if (entrada != null) {

    TextView texto_superior_entrada = (TextView) view.findViewById(R.id.textView_titulo);

    if (texto_superior_entrada != null)

    30 marzo, 2014 a las 15:01

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    texto_superior_entrada.setText(((Lista_contenido.Lista_entrada) entrada).textoEncima);

    ImageView imagen_entrada = (ImageView) view.findViewById(R.id.imageView_imagen_miniatura);

    if (imagen_entrada != null)

    imagen_entrada.setImageResource(((Lista_contenido.Lista_entrada) entrada).idImagen);

    }

    No hara falta hacer lo mismo con el texto inferior? o no es necesario?

    Desde ya muchas gracias

    RESPONDER

    Ramn [Admin Jarroba]

    Buenas Cristian,

    No es necesario, ya que en Fragment_Lista.java se toma el elemento del listado (ya que un elemento del listado tiene imagen y ttulo, pero no descripcin que es el

    texto inferior), no del detalle ojo!.

    Dnde s se aade el texto inferior es en Fragment_Detalle.java

    RESPONDER

    30 marzo, 2014 a las 15:33

    Cristian

    bien, muchas gracias, mi confucion vino a raz de leer el otro articulo de ListView, ya que en ese ejemplo el listView viene con tres elementos. En este

    caso se trata del listado de titulo e imagen, no del detalle. Gracias nuevamente por el tutorial y por aclarar dudas.

    RESPONDER

    30 marzo, 2014 a las 16:15

    Jhon

    Buenas excelente tutorial pero tengo una duda

    estoy usando las carpetas layout-large y layout-large-portal respectivamente para que se acomode de acuerdo a la pantalla si es grande sea vertical u horizontal, y me sale

    un inconveniente al momento de darle click a la lista el detalle no me aparece en el framelayout del activityhorizontal o vertical sino que me carga ocupando todo en entorno

    y no se en que me pueda estar equivocando.

    Clase detalle

    22 marzo, 2014 a las 17:31

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    public class Activity_Detalle extends FragmentActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.layout_activity_detalle);

    Fragment_Detalle fragment =null;

    if (savedInstanceState == null) {

    fragment = new Fragment_Detalle();

    getSupportFragmentManager().beginTransaction().add(R.id.framelayout_contenedor_detalle, fragment).commit();

    }

    }

    }

    como veras en el codigo es como que solo escojiese el layout_activity_detalle que es el que es para smarthphone y no me escoje el activity compuesto

    layout_activity_principal_dospaneles (por el fragment y framelayout )

    en que me puedo estar equivocando?

    RESPONDER

    Ramn [Admin Jarroba]

    Buenas Jhon,

    por lo que nos comentas, lo ms seguro sea que no est correctamente configurado los ficheros layout.xml que identifican los alias. Revisa que estn los nombres

    de los ficheros bien puestos en este alias.

    RESPONDER

    22 marzo, 2014 a las 20:42

    Jhon

    Buenas, gracias ya lo pude resolver era que yo estaba preguntando mal lo siguiente:

    if (findViewById(R.id.framelayout_contenedor_detalle) != null) {

    24 marzo, 2014 a las 14:09

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    dosFragmentos = true;

    }

    }

    en vez de findViewById() , estaba poniendo getSupportFragmentManager().findFragmentById() por eso siempre me cojia por falso cargar el intent y no

    el fragment que le habia indicado.

    gracias con todo

    saludos

    Jhon

    RESPONDER

    Ramn [Admin Jarroba]

    Que todo se solucione as de fcil

    RESPONDER

    24 marzo, 2014 a las 21:07

    Oscar M

    Buen material. Enhorabuena.

    La verdad que lo he seguido y me ha quedado muy claro el como hay que usar fragments para distintas pantallas. Pero tengo una duda (o por lo menos no se como

    enfocarlo). Tengo un listado con Nombres (por ejemplo Clientes) y en el fragment de detalle quiero poder editar esos clientes. Hasta hay todo bien, pero que sucede

    cuando no hay ningn dato en la base de datos? El listado evidentemente no aparece (y creo que en versiones 4.x aparece el tpico circulo dando vueltas) y por lo tanto el

    detalle tampoco segn esta el cdigo. Como podramos implantarlo para que sino hay ningn dato se muestre el detalle en modo de alta o como como mostrar el detalle

    ya que el modo de trabajo se puede pasar por argumentos.

    Gracias por la ayuda, saludos!!!

    RESPONDER

    19 febrero, 2014 a las 10:57

    Ramn [Admin Jarroba]

    Buenas Oscar,

    Puedes crear una variable en el hashmap que indique que est vaco o bien ver que el hashmap est vaco con su longitud, as sabras si tiene datos o no para

    poner un Fragment diferente en el detalle y mostrar el listado vaco. Tienes un ejemplo de como mostrar una View vaca en:

    19 febrero, 2014 a las 22:51

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    http://developer.android.com/reference/android/app/ListActivity.html

    RESPONDER

    Oscar

    Hola, excelente tutorial y muy bien explicado, en este momento tengo una duda.. Como puedo implementar esta lista donde el contenido de la lista se debe de mostrar

    dentro de un fragment. Porque tengo otra lista principal donde para ingresar a la lista del tutorial tengo que seleccionar un elemento de la lista y asi llegar a visualizar la lista

    del tutorial, el detalle es que en mi lista principal se implemente un Fragment no un Activity. Me doy a entender? Gracias.

    RESPONDER

    20 enero, 2014 a las 22:09

    Ramn [Admin Jarroba]

    Buenas Oscar,

    El listado est hecho sobre un Fragment, concretamente es un ListFragment. Que no lleve a confusin que todo Fragment ha de estar sobre una Activity.

    RESPONDER

    20 enero, 2014 a las 23:08

    Oscar

    Lo que necesito es que este listado (ListFragment) este al iniciar junto a otros fragments en otro listado:

    private void displayView(int position) {

    Fragment fragment = null;

    switch (position) {

    case 0:

    fragment = new NuevoListado();

    break;

    Donde nuevo listado es la lista del tutorial,

    RESPONDER

    20 enero, 2014 a las 23:38

    Ramn [Admin Jarroba] 22 enero, 2014 a las 18:50

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    No deberas tener ningn problema de poner varios listados sobre la misma Activity si estn en Fragments separados. No s si te refieres a esto

    RESPONDER

    Adrian

    Excelente tutorial.

    Una forma facil de realizar un filtrado de un listview normal seria esta :

    //create an ArrayAdaptar from the String Array

    dataAdapter = new ArrayAdapter(this,

    R.layout.country_list, countryList);

    ListView listView = (ListView) findViewById(R.id.listView1);

    // Assign adapter to ListView

    listView.setAdapter(dataAdapter);

    //enables filtering for the contents of the given ListView

    listView.setTextFilterEnabled(true);

    listView.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView parent, View view,

    int position, long id) {

    // When clicked, show a toast with the TextView text

    Toast.makeText(getApplicationContext(),

    ((TextView) view).getText(), Toast.LENGTH_SHORT).show();

    }

    });

    EditText myFilter = (EditText) findViewById(R.id.myFilter);

    myFilter.addTextChangedListener(new TextWatcher() {

    public void afterTextChanged(Editable s) {

    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    20 enero, 2014 a las 17:57

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    public void onTextChanged(CharSequence s, int start, int before, int count) {

    dataAdapter.getFilter().filter(s.toString());

    }

    });

    Para adaptarlo a vuestro caso, debera de realizar el filtrado en la clase Lista_adaptador pasandole en la cabecera del constructor el string por el que filtro?

    Muchas gracias.

    RESPONDER

    Ramn [Admin Jarroba]

    Buenas Adrian,

    para hacerlo lo tienes muy fcil desde ah, solo has de implementar el interfaz Filterable en el adapatador. En el mtodo getFilter() tienes que crear un nuevo filtro a

    devolver con new Filter(){} he implementar sus mtodos. El resto ya es lgica de lo que tiene que hacer tu filtro

    RESPONDER

    20 enero, 2014 a las 19:26

    Miguel

    Hola muy buenas. Soy nuevo en esto, llevo poco tiempo con programacin android. El tutorial me sirvi de mucho. Lo que no se bien como hacer es implementar esta

    aplicacin con base de datos sqlite. Que las imgenes se guarden el sd y se carguen a travs de la base de datos. Gracias.

    RESPONDER

    10 diciembre, 2013 a las 18:11

    Ramn [Admin Jarroba]

    Muy buenas Miguel,

    De momento no tenemos tutoriales para lo que nos pides pero te recomiendo algunos

    Para la base de datos, como bien indicas tienes que usar Sqlite, te recomiendo que eches un vistazo a: http://developer.android.com/training/basics/data-

    storage/databases.html.

    10 diciembre, 2013 a las 20:52

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Para guardar las imgenes en la memoria interna o en la externa tienes informacin en: http://developer.android.com/guide/topics/data/data-

    storage.html#filesInternal

    RESPONDER

    David lopez

    Hola, buen tutorial para iniciar android, tengo una consulta:

    He tenido problemas tratando de obtener la descripcion de los animales desde el archivo string.xml, me aparece

    Cannot make a static reference to the non-static method getString(int) from the type Context

    Cuando en vez de la descripcion llama al nombre del string:

    getString(R.string.descripcionanimal1)

    Saludos

    RESPONDER

    5 mayo, 2014 a las 15:49

    Ramn [Admin Jarroba]

    Buenas David,

    necesitara ver ms del cdigo. Pero lo que te dice es que ests llamando a algo que no es esttico desde algo esttico (Hashmap es esttico por

    ejemplo, podras ser el causante).

    RESPONDER

    5 mayo, 2014 a las 21:45

    jonathan

    Excelente tutorial, pero aydame con algo:

    Al momento de la implementacin, en el activity Activity_Detalle.java y en el Activity_Principal.java tengo un problema solo en 2 mtodos: el add y el replace.

    Activity_Detalle.java

    4 septiembre, 2013 a las 22:03

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    import android.os.Bundle;

    import android.support.v4.app.FragmentActivity;

    getSupportFragmentManager().beginTransaction().add(R.id.framelayout_contenedor_detalle, fragment).commit();

    The method add(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, Fragment_Detalle)

    Activity_Principal.java

    import android.content.Intent;

    import android.os.Bundle;

    import android.support.v4.app.FragmentActivity;

    import android.app.Fragment;

    getSupportFragmentManager().beginTransaction().replace(R.id.framelayout_contenedor_detalle, fragment).commit();

    The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, Fragment_Detalle)

    Gracias por la ayuda

    RESPONDER

    Ramn [Admin Jarroba]

    El error que comentas es tpico de exportar la librera de Fragments que no son. Eclipse te da a elegir entre dos. Tienes que exportar

    android.support.v4.app.Fragment. Fjate que has exportado android.app.Fragment y con esta no funcionan bien los Fragments.

    Voy a aadir una nota al tutorial para evitar que se tenga este problema. Gracias por el feedback Jonathan

    RESPONDER

    4 septiembre, 2013 a las 22:44

    NOMBRE: obligatorio COMENTARIO:

    Dejanos tu comentario

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    www.jarroba.com 2014

    By Reimon & Richard

    E-MAIL: obligatorio, no sera publicado

    WEB O BLOG:

    Enviar Comentario