PDF de programación - UF3.7 RecyclerViews

Imágen de pdf UF3.7 RecyclerViews

UF3.7 RecyclerViewsgráfica de visualizaciones

Publicado el 16 de Septiembre del 2019
84 visualizaciones desde el 16 de Septiembre del 2019
196,1 KB
27 paginas
Programación multimedia y dispositivos móviles

UF3.7 RecyclerViews

RecyclerViews


El RecyclerView es una versión más flexible y avanzada de
ListView.
Usamos RecyclerView para mostrar grandes conjuntos de
datos de manera que el desplazamiento entre ellos sea
eficiente al mantener una cantidad limitada de vistas.
Lo que hace un RecyclerView es mostrar datos cuyos
elementos se van reciclando cuando ya no son visibles por
el scroll de la lista.

RecyclerViews


Cuando usemos RecyclerView tendremos que utilizar estos
3 componentes:
• RecyclerView.Adapter
• RecyclerView.ViewHolder
• LayoutManager o administrador de diseño
El adaptador acercará el modelo de datos que debe ser
mostrados y el LayoutManager será el responsable de
posicionar cada ítem dentro del RecyclerView y decidir
cuándo reciclar las vistas de items que ya no son visibles.
Además habrá que definir un layout xml para especificar el
formato gráfico con el que se mostrarán los datos.

RecyclerViews. activity.xml


Para incluir un RecyclerView en el layout de nuestro activity
se deberá incluir el siguiente código:
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

Debemos asegurarnos de que en la sección de dependencias
(dependencies) del fichero build.gradle del módulo principal está la
referencia a la librería de soporte recyclerview-v7, lo que nos permitirá el
uso del componente RecyclerView en la aplicación:

compile 'com.android.support:recyclerview-v7:+'

RecyclerViews. Adapter


Para definir el adaptador habrá que crear una clase que
extienda de RecyclerView.Adapter que usará una instancia
de RecyclerView.ViewHolder.
public class MiAdaptador extends
RecyclerView.Adapter<MiAdaptador.ViewHolder> {}
Este ViewHolder se encargará de tomar los valores del
layout.
Si necesitamos manejar un ViewHolder en concreto se
deberá definir con una clase interna.

public class MiAdaptador extends
RecyclerView.Adapter<MiAdaptador.MiViewHolder>
{}

RecyclerViews. Adapter


Dentro de la clase MiAdaptador se deberá incluir lo
siguiente:
Se deberá definir un atributo para almacenar la lista con los
datos.

private String[] datos;
O

private ArrayList<Patron> datos;
En el caso de que los datos a representar sean algo más
que una simple cadena de texto.

RecyclerViews. Adapter


El adaptador deberá tener un constructor donde se inicialice la
lista de datos:

public MiAdaptador(String[] datos) {

this.datos = datos;

}
O

public MiAdaptador(ArrayList<Patron> datos) {

this.datos = datos;

}

RecyclerViews. Adapter


En el caso de necesitar un ViewHolder específico:
public static class MiViewHolder
extends RecyclerView.ViewHolder {
private TextView txtUno;
private TextView txtDos;

public MiViewHolder(View itemView) {
super(itemView);
txtUno = (TextView)itemView.findViewById(R.id.txtUno);
txtDos = (TextView)itemView.findViewById(R.id.txtDos);
}

public void bindPatron(Patron p) {

txtUno.setText(p.getAtributo1());
txtDos.setText(p.getAtributo2());

}
}

RecyclerViews. Adapter


Y se deberán implementar los siguientes métodos:
El método onCreateViewHolder() que se limita a “inflar” una
vista a partir del layout correspondiente a los elementos de la
lista, y crear y devolver un nuevo ViewHolder pasándole dicha
vista como parámetro.
@Override
public MiAdaptador.ViewHolder onCreateViewHolder(
ViewGroup parent, int viewType) {

View v = LayoutInflater.from(parent.getContext())

.inflate(R.layout.mi_layout, parent, false);

ViewHolder vh = new ViewHolder(v);
return vh;

}

RecyclerViews. Adapter


En el caso de tener un ViewHolder específico:
@Override
public MiViewHolder onCreateViewHolder(ViewGroup viewGroup,
int viewType) {


View itemView =

LayoutInflater.from(viewGroup.getContext())

.inflate(R.layout.mi_layout, viewGroup, false);



}

MiViewHolder mvh = new MiViewHolder(itemView);

return mvh;

RecyclerViews. Adapter


En onBindViewHolder() tan sólo tendremos que recuperar el
objeto correspondiente a la posición recibida como parámetro
y asignar sus datos sobre el ViewHolder también recibido
como parámetro:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// get element from your dataset at this position
// replace the contents of the view with that element
holder.TextView.setText(datos[position]);
}

Para un ViewHolder específico:
public void onBindViewHolder(MiViewHolder holder, int position) {

holder.txtUno.setText(datos.get(position).getAtributo1());
holder.txtDos.setText(datos.get(position).getAtributo2());

}

RecyclerViews. Adapter


Y el método getItemCount() que tan sólo devolverá el
tamaño de la lista de datos:
@Override
public int getItemCount() {
return datos.size();
}

Con esto tendríamos finalizado el adaptador, por lo que ya
podríamos asignarlo al RecyclerView en nuestra. Esto es tan
sencillo como lo era en el caso de ListView.

RecyclerViews. Activity.java


Tendremos que crear nuestro adaptador pasándole como
parámetro la lista de datos y asignarlo al control RecyclerView
mediante setAdapter():
miRecyclerView =
(RecyclerView)findViewById(R.id.my_recycler_view);

miRecyclerView.setHasFixedSize(true);

miLayoutManager = new LinearLayoutManager(this);
miRecyclerView.setLayoutManager(miLayoutManager);

miAdapter = new MiAdaptador(datos);
miRecyclerView.setAdapter(miAdapter);

RecyclerViews. Activity.java


El método setHasFixedSize(), aunque no es obligatorio, sí es
conveniente usarlo cuando estemos seguros de que el tamaño
de nuestro RecyclerView no va a variar (por ejemplo debido a
cambios en el contenido del adaptador), ya que esto permitirá
aplicar determinadas optimizaciones sobre el control.
El siguiente paso será asociar al RecyclerView un
LayoutManager determinado, para determinar la forma en la
que se distribuirán los datos en pantalla.
Si lo que queremos es mostrar elementos en una lista de
desplazamiento horizontal o vertical usaremos el
LinearLayoutManayer incorporado en el RecyclerView.
Si lo que queremos es mostrar elementos en una cuadrícula
usaremos el GridLayoutManager.

RecyclerViews. Eventos


La gran sorpresa del RecyclerView es que no incluye un evento
onItemClick() como ocurría en el caso de ListView.
RecyclerView delega también esta tarea a otro componente, en
este caso a la propia vista que conforma cada elemento de la
colección.
Aprovecharemos la creación de cada nuevo ViewHolder para
asignar a su vista asociada el evento onClick. Además desde
fuera del adaptador, incluiremos el listener correspondiente
como atributo del adaptador, y dentro de éste nos limitaremos a
asignar el evento a la vista del nuevo ViewHolder y a lanzarlo
cuando sea necesario desde el método onClick().

implements View.OnClickListener

RecyclerViews. Eventos


public class MiAdaptador extends
RecyclerView.Adapter<MiAdaptador.MiViewHolder>
implements View.OnClickListener {

private View.OnClickListener listener;

En la definición del ViewHolder:

itemView.setOnClickListener(this);


implements View.OnClickListener

RecyclerViews. Eventos


El método setOnClickListener() nos servirá para asociar el
listener real a nuestro adaptador en el momento de crearlo :

public void
setOnClickListener(View.OnClickListener listener) {
this.listener = listener;
}

La implementación del onClick(), se limitará a lanzar el mismo
evento sobre el listener externo
@Override
public void onClick(View view) {
if(listener != null)
listener.onClick(view);
}

RecyclerViews. Eventos


Por último en la actividad, tras crear el adaptador:

miAdapter = new MiAdaptador(datos);

miAdapter.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
String msg = "Seleccionada la opción "
+ miRecyclerView.getChildPosition(v) ;
Toast.makeText(MainActivity.this,
msg,Toast.LENGTH_SHORT).show();
}
});

RecyclerViews. Ejemplo

Ahora crearemos un nuevo proyecto basándonos en el
proyecto ListView2.
• En el activity.xml en vez de un ListView incluiremos un

RecyclerView.

• Usaremos el mismo LinearLayout, listview_item.xml, para

cada uno de los elementos.

• Necesitaremos la clase ListaItem que encapsule los datos

de cada elemento.

• Tendremos que crear la clase Adaptador.
• Crearemos una clase Datos como fuente de datos.
• Relacionaremos todo en el Activity.java



RecyclerViews. Ejemplo

La clase Adaptador:

public class MiAdaptador extends RecyclerView.Adapter<MiAdaptador.MiViewHolder>
implements View.OnClickListener {
private ArrayList<ListaItem> datos;
private View.OnClickListener listener;

public static class MiViewHolder extends RecyclerView.ViewHolder {
private ImageView imagen;
private TextView textoSup;
private TextView textoInf;

public MiViewHolder(View view) {
super(view);
imagen = (ImageView) view.findViewById(R.id.imageView);
textoSup = (TextView) view.findViewById(R.id.tvSuperior);
textoInf = (TextView) view.findViewById(R.id.tvInferior);
}

public void bindListaItem(ListaItem li) {

imagen.setImageResource(li.getImagen());
textoSup.setText(li.getTextoSup());
textoInf.setText(li.getTextoInf());
}
}



RecyclerViews. Ejemplo

public MiAdaptador(ArrayList<ListaItem> datos) {
this.datos = datos;
}

@Override
public MiAdaptador.MiViewHolder onCreateViewHolder(
ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layo
  • Links de descarga
http://lwp-l.com/pdf16580

Comentarios de: UF3.7 RecyclerViews (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

Revisar política de publicidad