Hello HumanOS!!! Después de mucho tiempo sin escribir sobre #Android he decidido hacer un mini tuto sobre el uso de Fragments, espero que les sea útil.

Un poco de historia

Cuando empezaron a aparecer dispositivos de gran tamaño tipo tablet, el equipo de Android tuvo que solucionar el problema de la adaptación de la interfaz gráfica de las aplicaciones a ese nuevo tipo de pantallas. Una interfaz de usuario diseñada para un teléfono móvil no se adaptaba fácilmente a una pantalla 4 o 5 pulgadas mayor. La solución a esto vino en forma de un nuevo tipo de componente llamado Fragment.

En concreto

Un fragment no puede considerarse ni un control ni un contenedor, aunque se parecería más a lo segundo. Un fragment podría definirse como una porción de la interfaz de usuario que puede añadirse o eliminarse de una interfaz de forma independiente al resto de elementos de la actividad, y que por supuesto puede reutilizarse en otras actividades. Esto, aunque en principio puede parecer algo trivial, nos va a permitir poder dividir nuestra interfaz en varias porciones de forma que podamos diseñar diversas configuraciones de pantalla, dependiendo de su tamaño y orientación, sin tener que duplicar código en ningún momento, sino tan sólo utilizando o no los distintos fragmentos para cada una de las posibles configuraciones. Intentemos aclarar esto un poco con un ejemplo.

El ejemplo

En este ejemplo no vamos a ir muy profundo, solo haremos un básico de cambiar la vista sin cambiar de activity.

1- Lo primero es crear las distintas vistas

vista1.xml




    

vista2.xml




    

2- Creamos un fragment para cada vista

Fragment1.java

public class Fragment1 extends Fragment{

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

Fragment2.java

public class Fragment2 extends Fragment{

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

3- Agregamos el FrameLayout a la vista principal

Este FrameLayout es como un contenedor que va a permitir cambiar entre los distintos fragments.

activity_main.xml





    

    

    

4- Implementamos el cambio entre fragment

public class MainActivity extends AppCompatActivity {


    //Permite cambiar en contenido de un FrameLayout
    private FragmentTransaction fragmentTransaction;

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

        //Cambiar a la vista 1 al precionar el boton "Vista 1"
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeFragment(1);
            }
        });

        //Cambiar a la vista 2 al precionar el boton "Vista 2"
        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeFragment(2);
            }
        });

    }

    public void changeFragment(int FRAGMENT_ID) {

        fragmentTransaction = getSupportFragmentManager().beginTransaction();

        switch (FRAGMENT_ID) {
            case 1:

                fragmentTransaction.replace(R.id.fragment_content, new Fragment1());
                fragmentTransaction.commit();
                break;
            case 2:
                fragmentTransaction.replace(R.id.fragment_content, new Fragment2());
                fragmentTransaction.commit();
                break;

        }

    }
}

La Descarga

Aquí les dejo el código del proyecto HumanOS Fragments v1.zip (428 descargas)

Al final

Ahora solo les queda desarrollar su imaginación, es importante que sepan que hay otras vías de hacer esto y que los fragments son muy útiles e imprescindibles a la hora de hacer apps en Android. Espero que les sea útil y recuerden dejar sus impresiones y dudas en los comentarios.