Bienvenidos sean a este post, hoy aplicaremos fragments a nuestra aplicacion llamada Mis Lugares, en este post tienen el listado para crearla, en este caso vamos a agregar un solo fragment que utilizaremos para reemplazar a MainActivity, nuestra primera modificacion sera sobre activity_main.xml donde le cambiaremos el nombre para ello iremos al recurso res/layout/acivity_main.xml haremos click con el boton derecho y seleccionaremos refactor->rename, nos aparecera al siguiente cuadro

Anuncios

En donde va el nombre pondremos el que figura en la imagen, fragment_selector.xml, presionen Refactor y este no solamente modificara el nombre del layout sino tambien todas las referencias del codigo, ahorrandosnos unos cuantos pasos, nuestro siguiente paso sera agregar una nueva clase para utilizar el fragment, a esta clase la llamaremos SelectorFragment, recuerden click con el boton derecho sobre el contenedor de clases Javas y seleccionen New -> Java Class completan el campo Name con el valor SelectorFragment y pulsen Ok para crearla, una vez generado reemplacen el codigo generado por el siguiente:

package org.example.mislugares;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;

public class SelectorFragment extends Fragment
        implements AdapterView.OnItemClickListener {

    @Override
    public View onCreateView(LayoutInflater inflador,
                             ViewGroup contenedor,
                             Bundle savedInstanceState){
        View vista = inflador.inflate(R.layout.fragment_selector,
                contenedor, false);
        return vista;
    }

    @Override
    public void onActivityCreated(Bundle state){
        super.onActivityCreated(state);
        BaseAdapter adaptador = new AdaptadorCursorLugares(getActivity(),
                Lugares.listado());
        ListView listView = (ListView) getView().
                findViewById(R.id.ListaVista);
        listView.setAdapter(adaptador);
        listView.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View vista, int posicion,
                            long id){
        Intent intento = new Intent(getActivity(), VistaLugar.class);
        intento.putExtra("id", id);
        startActivity(intento);
    }
}

En esta clase extendera a Fragment y a su vez implementara la interfaz para poder usar la accion de hacer click sobre un item, nuestro primer metodo sera onCreateView(), tendremos tres argumentos: uno de tipo LayoutInflater llamado inflador, el siguiente sera de tipo ViewGroup llamado contenedor y el tercero de tipo Bundle llamado savedInstanceState, luego crearemos un objeto llamado vista de tipo View el cual por medio de inflador y el metodo inflate() generara o “inflara” el layout que informemmos (R.layout.fragment_selector) y luego le pasaremos el valor almacenado en contenedor y por ultimo devolveremos el valor de vista por medio de return.

Nuestro siguiente metodo sera onActivityCreated() donde recibira el argumento state de tipo Bundle, nuestro siguiente paso sera crearlo por medio de super, despues crearemos un objeto de tipo BaseAdapter llamado adaptador, para este objeto crearemos por medio de AdaptadorCursorLugares() y al le enviaremos la actividad que lo invoca por medio de getActivity(), esto seria el contexto, luego la clase Lugares y por ultimo el metodo listado() propio de esta clase, nuestro siguiente objeto sera de tipo ListView lo llamaremos listView y en este usaremos a getView() para obtener la vista actual y luego por medio de findViewById() le asignaremos el layout informado, luego a este objeto le asignaremos un adaptador por medio de setAdapter() y por ultimo usaremos a setOnItemClickListener() con el apuntador this para hacer referencia que debe escuchar esta lista.

Anuncios

Nuestro ultimo metodo sera onItemClick(), esta tendra varios argumentos el primero es arg0 de tipo ArgView, luego tendremos un objeto View llamado vista, despues un atributo de tipo int llamado posicion y por ultimo uno de tipo long llamado id, para esta ocasion solamente usaremos el atributo llamado id, primero crearemos una intencion llamada intento, del tipo Intent, en este caso primero crearemos la intencion, en el primer atributo setearemos el contexto y para este caso usaremos getActivity para saber cual es la actividad que la invoca, nuestro siguiente atributo sera la clase destino, para nuestro siguiente paso enviaremos un atributo extra por medio de putExtra() el cual sera el valor recibido en id, y por ultimo iniciaremos la actividad en este caso a intento.

Nota: Si quieren saber mas les recomiendo los post de intenciones y actividades.

Con esto hemos terminado con la nueva clase, nuestro siguiente paso sera crear un nuevo layout, en este caso sera activity_main.xml, recuerden click con el boton derecho sobre la carpeta res/layout, seleccionen New -> Layout resource file y luego completen en el campo File name con activity_main, en Root element usen LinearLayout, en Source set debe ir main y en Directory name debe ir layout, con todo esto pulsen Ok para generar el nuevo layout, una vez generado reemplacen el codigo generado por el siguiente:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/selector_fragment"
        android:name="com.tinchicus.mislugares.SelectorFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />
</LinearLayout>

Lo mas importante de este layout es nuestro elemento fragment, al cual le informaremos un id, luego en el campo name le pasaremos el nombre del layout SelectorFragment (el dominio deben modificarlo al que usaron para su paquete), en layout_width (ancho) usaremos 0dp, en layout_height (alto) usaremos a match_parent para que use todo, por ultimo le daremos un peso (weight) de 1, nuestro siguiente modificacion sera en MainActivity en el metodo onCreate() deben cambiar la linea setContentView de la siguiente forma:

setContentView(R.layout.activity_main);

Lo siguiente es eliminar el metodo onItemClick() pero les recomiendo comentarlo como se ve a continuacion:

    /* public void onItemClick(AdapterView<?> parent, View vista,
                               int posicion, long id){
        Intent i = new Intent(this,VistaLugar.class);
        i.putExtra("id", id);
        startActivityForResult(i,0);
    } */
Anuncios

Esto equivale a eliminar el bloque porque sera ignorado por el compilador, nuestro siguiente caso sera eliminar la siguiente linea o como muestro solamente con comentar la misma para que desaparezca:

// public CursorAdapter adaptador;

Tambien debemos eliminar las siguientes lineas pero les recomiendo comentarlas:

// adaptador = new CursorAdapter(this,Lugares.listado());
// listavista.setAdapter(adaptador);

Con todas estas modificaciones debemos modificar que implementamos porque hemos eliminado un metodo que era necesario, para ello debenos pasar el encabezado de la clase:

public class MainActivity extends AppCompatActivity
        implements AdapterView.OnItemClickListener,
        LocationListener {

A la siguiente forma:

public class MainActivity extends AppCompatActivity
        implements LocationListener {

Nuestra ultima modificacion sera eliminando la siguiente linea:

// listavista.setOnItemClickListener(this);

Con todo estas modificaciones realizadas podemos probar nuestra aplicacion y debera quedar de la siguiente forma.

Nota: No les hice eliminar las lineas y bloques porque puede ser necesario volver a utilizar la forma anterior en lugar de Fragments, si estan completamente seguros de dejarlo como se ve pueden borrar las misams sabiendo que la aplicacion va a seguir funcionando.

Como se ve en la imagen no hicimos ninguna modificacion sino que reemplazamos la forma de mostrar informacion de Vista a Fragment pero este nos servira de base para nuestros proximos posts.

Anuncios

En resumen, hoy hemos visto como implementar Fragment en una aplicacion, hemos hecho todos los pasos necesarios para su aparicion correcta, hemos hecho las modificaciones necesarias en nuestra aplicacion, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.