Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DESARROLLO
En Android se pueden utilizar Tabs o Pestañas para mejorar el diseño de una aplicación;
la vista TabLayout permite mostrar pestañas horizontalmente en el diseño de nuestras
aplicaciones. Cuando se agrega un objeto de la clase TabLayout al diseño de una
pantalla, se tienen que agregar las pestañas o Tabs que tendrá la vista TabLayout; para
esto se agregan elementos TabItem. Además, se debe vincular con el TabLayout una
vista ViewPager para indicar que fragmento o diseño se debe mostrar en la pantalla
cuando se selecciona una determinada pestaña (DEVELOPER ANDROID, 2019).
Los fragmentos serán los diseños que se muestran en la pantalla cuando se selecciona
una determinada pantalla. Para vincular los fragmentos con las pestañas del TabLayout
se debe utilizar un adaptador.
Fragmentos
ViewPager
A continuación se diseñará una pequeña aplicación para probar el uso de las Pestañas
o Tabs, utilizando la vista TabLayout. Primero se crea un nuevo proyecto en Android
Studio, al cual se le colocará el nombre de “TrabajarConTabs”, igual pueden colocarle
el nombre que deseen a sus proyectos y actividades. Los pasos para crear un proyecto
en Android Studio, están descritos en el ítem 2.2 de la primera guía (Introducción al
Entorno Android). Igualmente en el ítem 2.4 de la primera guía se explica cómo pueden
agregar nuevas actividades a sus proyectos (Figura 28). La aplicación consta de un
TabLayout con tres Pestañas o Tabs (TabItem). El usuario podrá seleccionar una de las
tres pestañas y se visualizará un fragmento o diseño asociado a la pestaña que
selecciono el usuario; cada fragmento mostrara una pequeña información sobre los
controles de selección que se estudiaron en la guía de aprendizaje anterior.
Cuando se crea el nuevo proyecto, se genera la actividad principal que tendrá los
archivos MainActivity.java para la parte lógica y el archivo activity_main.xml para
diseñar la interfaz gráfica que tendrá el TabLayout con tres Pestañas.
Luego se deben crear tres fragmentos o diseños en blanco para mostrar al usuario
información asociada a la pestaña que selecciono. Como se mencionó tendremos
tres pestañas; cada pestaña cuando se seleccione, mostrara información sobre algún
control de selección (Spinner, ListView y GridView). Los nombres que se le colocaran
a los fragmentos serán los siguientes: SpinnerFragment, ListViewFragment y
GridViewFragment. Igual pueden asignar los nombres que deseen.
Cuando se crean los fragmentos, por defecto se crean los archivos XML para realizar
el diseño que tendrán estos fragmentos, los archivos son: fragment_spinner.xml,
fragment_list_view.xml y fragment_grid_view.xml; recuerden solo se asignara
apariencia a los diseños en los archivos XML; la parte lógica de los fragmentos solo
contaran con el método onCreateView() para dibujar el diseño de cada fragmento.
Nota: Cada uno de los pasos descritos anteriormente, se explicaran en los siguientes
apartados de la guía. A continuación se muestra la estructura del proyecto
“TrabajarConTabs”.
Figura 2. Estructura del proyecto TrabajarConTabs
android:icon="@drawable/nombre_del_icono"
Archivo activity_main.xml
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabControlesSeleccion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#AACED3">
<com.google.android.material.tabs.TabItem
android:id="@+id/tabSpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Spinner"
android:icon="@drawable/lista_desplegable"/>
<com.google.android.material.tabs.TabItem
android:id="@+id/tabListView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ListView"
android:icon="@drawable/lista"/>
<com.google.android.material.tabs.TabItem
android:id="@+id/tabGridView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GridView"
android:icon="@drawable/grid"/>
</com.google.android.material.tabs.TabLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/paginas"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.viewpager.widget.ViewPager>
</LinearLayout>
Para crear un nuevo fragmento en blanco, se hace clic derecho sobre el paquete de
java en donde están las clases lógicas del proyecto, luego se va a New ---- Fragment
---- Fragment (Blank). Como se muestra en la Figura 8.
Figura 8. Agregar un fragmento en blanco al proyecto
El diseño de cada fragmento solo tendrá dos controles o vistas de tipo TextView; una
etiqueta de texto para mostrar un título y otra etiqueta para mostrar información.
Archivo fragment_spinner.xml
Archivo fragment_list_view.xml
Archivo fragment_grid_view.xml
Para crear el adaptador, se crea una nueva clase Java; y se asigna el nombre
AdaptadorPaginas.java. En la Figura 13, se describen los paso para crear la clase
adaptador; clic derecho sobre el paquete del proyecto New --- Java Class.
package com.example.trabajarcontabs;
//Se importan las clases que contienen algunos métodos a utilizar en la implementación del código.
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
//Se indica que la clase AdaptadorPaginas es una clase extendida de la clase FragmentPagerAdapter.
//La clase FragmentPagerAdapter se puede utilizar como un administrador de fragmentos, cuando se
//tienen varias pestañas. Después de declarar la clase AdaptadorPaginas se agregan todos sus métodos:
//el método constructor, el método getItem() y getCount().
public class AdaptadorPaginas extends FragmentPagerAdapter {
//Se declara una variable de tipo entero llamada numeroPaginas para asociarla al número de tabs
//o pestañas y a los fragmentos asociados.
int numeroPaginas;
public AdaptadorPaginas(@NonNull FragmentManager fm, int numPaginas) {
super(fm, numPaginas);
this.numeroPaginas = numPaginas;
}
@NonNull
@Override
//Al método getItem(), se le pasa como parámetro una posición. Luego se agrega una sentencia switch, y
//dependiendo de la posición que se pase como parámetro; se retorna el fragmento que mostrará la
//información asociada a la pestaña seleccionada.
public Fragment getItem(int position) {
switch (position){
case 0:
return new SpinnerFragment();
case 1:
return new ListViewFragment();
case 2:
return new GridViewFragment();
default: return null;
}
}
@Override
//El método getCount() retorna el número de Tabs o pestañas.
public int getCount() {
return numeroPaginas;
}
}
package com.example.trabajarcontabs;
//Se importan las clases que contienen algunos métodos a utilizar en la implementación del código.
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import com.google.android.material.tabs.TabLayout;
public class MainActivity extends AppCompatActivity {
//Se crean dos atributos uno de tipo TabLayout, llamado tabControlesSeleccion y otro de tipo
//ViewPager llamado paginas; para asociarlos con los controles o vistas del diseño activity_main.xml.
TabLayout tabControlesSeleccion;
ViewPager paginas;
//Se declara el adaptador de nombre adaptadorPaginas, del tipo de la clase AdaptadorPaginas.
AdaptadorPaginas adaptadorPaginas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//El método findViewById() localiza los controles del fichero activity_main.xml,
//utilizando la clase R; después de identificarlos, los vincula con los atributos que se declararon
//al inicio de la clase.
tabControlesSeleccion = (TabLayout) findViewById(R.id.tabControlesSeleccion);
paginas = (ViewPager) findViewById(R.id.paginas);
//Se crea nuestro adaptador, el cual será un nuevo objeto de la clase AdaptadorPaginas; se pasa
//como parámetros al constructor de la clase, el método getSupportFragmentManager() que permite
//interactuar con los fragmentos asociados a esta actividad. El otro parámetro es el método
//getTabCount() del TabLayout para saber número de pestañas que tiene asociadas.
adaptadorPaginas = new AdaptadorPaginas(getSupportFragmentManager(),
tabControlesSeleccion.getTabCount());
//Se le indica al objeto ViewPager cuál es el adaptador que va a utilizar para mostrar los fragmentos.
paginas.setAdapter(adaptadorPaginas);
//Se implementa el método setOnTabSelectedListener() para para saber cuándo cambia de estado
//una pestaña o TabItem. Dependiendo la pestaña que se seleccione, se mostrará el fragmento
//definido en el adaptador.
tabControlesSeleccion.setOnTabSelectedListener(new
TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
paginas.setCurrentItem(tab.getPosition());
if(tab.getPosition() == 0){
adaptadorPaginas.notifyDataSetChanged();
}
if(tab.getPosition() == 1){
adaptadorPaginas.notifyDataSetChanged();
}
if(tab.getPosition() == 2){
adaptadorPaginas.notifyDataSetChanged();
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
//Se utiliza el método addOnPageChangeListener() y así mantener sincronizado el objeto ViewPager
//con la posición de la pestaña en el TabLayout.
paginas.addOnPageChangeListener(new
TabLayout.TabLayoutOnPageChangeListener(tabControlesSeleccion));
}
}
EJERCICIOS/ACTIVIDADES
BIBLIOGRAFÍA