RecyclerView Yippee ViewGroup agregado a Android Studio como reemplazo de Vista en cuadrícula y Vista de la lista. RecyclerView es una mejora de ambos (GridView y ListView) y se puede encontrar en último soporte v-7 paquetes. Esta mejora se logra reciclando vistas que están fuera de la vista del usuario. Por ejemplo, si el usuario se desplazó hacia abajo hasta una posición en la que los elementos 4 y 5 son visibles; los elementos 1, 2 y 3 se borrarían de la memoria para reducir el consumo de memoria.
ImplementadoOnorte: Para implementar el RecyclerView básico, debe diseñar tres subpartes que brinden a los usuarios el grado de control que necesitan al crear diferentes diseños de su elección.
- Diseño de tarjeta: Un diseño de pestaña es un diseño XML que se considerará un elemento para una lista creada por RecyclerView.
- ViewHolder: ViewHolder es una clase Java que almacena una referencia a las vistas de diseño de tarjetas que se pueden modificar durante la ejecución del programa utilizando una lista de datos obtenidos por bases de datos en línea o agregados.
- Clase de datos: La clase de datos es una clase Java personalizada que actúa como una estructura para almacenar información para cada elemento de RecyclerView.
custom_layout.xml (diseño de tarjeta)
<?xml versión = «1.0» codificación = «utf-8»?>
<LinearLayout xmlns: android = ”http://schemas.android.com/apk/res/android“
xmlns: app = ”http://schemas.android.com/apk/res-auto“ android: orientación = ”vertical”
android: layout_width = «match_parent» android: layout_height = «wrap_content»>
<androidx.cardview.widget.CardView
android: layout_margin = ”5dp”
aplicación: cardCornerRadius = ”10dp”
aplicación: cardElevation = «8dp»
android: layout_width = «match_parent»
android: layout_height = «wrap_content»>
<Disposición relativa
android: id = ”@ + id / item”
android: layout_width = «match_parent»
android: layout_height = «wrap_content»
android: padding = «10dp»>
<ImageView
android: layout_width = «100dp»
android: layout_height = «100 ppp»
android: id = ”@ + id / image”
android: layout_margin = ”5dp”
Android: src = ”@ mipmap / ic_launcher”/>
<Vista de texto
android: id = ”@ + id / name”
android: layout_width = «wrap_content»
android: layout_height = «wrap_content»
Android: layout_toRightOf = ”@ + id / image”
android: text = «Nombre»
android: textSize = «22sp»
android: textStyle = «negrita»
android: textColor = ”# 000”
android: layout_marginLeft = ”16dp”/>
<Vista de texto
android: layout_width = «wrap_content»
android: layout_height = «wrap_content»
android: id = ”@ + id / tag”
android: text = «Etiqueta»
Android: layout_toRightOf = ”@ + id / image”
Android: layout_below = «@ + id / name»
android: layout_marginLeft = ”16dp”
android: layout_marginTop = «8dp»
android: textColor = ”# 8D8D8D”
android: textSize = «18sp»
android: textStyle = «cursiva»/>
</Disposición relativa>
</androidx.cardview.widget.CardView>
</Disposición lineal>
Model.java (clase de datos)
paquete com.example.recyclerview;
clase pública Modelo {
// variables relacionadas con el diseño personalizado
imagen int;
Acorde nombre, etiqueta;// constructor
público Modelo(En t imagen, nombre de cadena, etiqueta de cadena) {
esta.imagen = imagen;
esta.nombre = nombre;
esta.etiqueta = marca;
}// getter y setter
público int obtener la imagen () {
devolver imagen;
}vacío público setImage (En t imagen) {
esta.imagen = imagen;
}público String getName () {
nombre de retorno;
}vacío público setName (nombre de la cadena) {
esta.nombre = nombre;
}público GetTag () cadena {
marca de retorno;
}vacío público setTag {cadena) {
esta.etiqueta = marca;
}
}
El adaptador es el código principal responsable de RecyclerView. Contiene todos los métodos importantes para resolver la implementación de RecylcerView. Los métodos básicos para una implementación exitosa son:
- onCreateViewHolder: que trata de inflar el diseño de la tarjeta como un elemento para RecyclerView.
- onBindViewHolder: que se ocupa de configurar varios datos y métodos relacionados con hacer clic en elementos específicos de RecyclerView.
- getItemCount: que devuelve la longitud de RecyclerView.
- onAttachedToRecyclerView: que conecta el adaptador al RecyclerView.
A continuación se muestra un ejemplo de un adaptador personalizado:
CustomAdapter.java
paquete com.example.recyclerview;
importar android.content.Context;
importar android.content.Intent;
importar android.view.LayoutInflater;
importar android.view.View;
importar android.view.ViewGroup;
importar android.widget.ImageView;
importar android.widget.RelativeLayout;
importar android.widget.TextView;
importar androidx.annotation.NonNull;
importar androidx.recyclerview.widget.RecyclerView;
importar java.util.List;clase pública Adaptador personalizado se expande RecyclerView.Adapter {
// crea una lista que pasa por nuestra clase Modelo
Lista modelList;
Contexto contexto;
público CustomAdapter (Lista modelList, Context context) {
esta.modelList = modelList;
esta.contexto = contexto;
}
@NonNull
@Transcripción
público MyViewHolder onCreateViewHolder (@NonNull ViewGroup padre, En t viewType) {
// inflar nuestra propia vista
Ver vista = LayoutInflater.de(parent.getContext ()). inflar (R.layout.diseño_personalizado,padre,Falso);
volver nuevo MyViewHolder (ver);
}
@Transcripción
vacío público onBindViewHolder (@NonNull titular de MyViewHolder, En t posición) {
// enlaza todas las vistas personalizadas según su posición
// para obtener las posiciones que llamamos nuestra clase Modelo
final Modelo modelo = modelList.get (posición);
poseedor.nombre.setText (model.getName ());
poseedor.etiqueta.setText (model.getTag ());
poseedor.imageView.setImageDrawable (contexto.getResources (). getDrawable (model.getImage ()));
// haga clic en el oyente
poseedor.distribución relativa.setOnClickListener (Nuevo View.OnClickListener () {
@Transcripción
vacío público onClick (Ver en) {
Intención Intención Nuevo Intención(contexto, DetailsActivity.clase);
intent.putExtra («imagen», model.getImage ());
intent.putExtra («nombre», model.getName ());
intent.putExtra («etiqueta», model.getTag ());
contexto.startActivity (intención);
}
});
}
@Transcripción
público int getItemCount () {
return modelList.Talla();
}
// todas las vistas personalizadas se guardan aquí o se inicializan aquí dentro de MyViewHolder
clase MyViewHolder se expande RecyclerView.ViewHolder {
ImageView imageView;
Vista de texto nombre, etiqueta;
Disposición relativa distribución relativa;
público MyViewHolder (@NonNull View itemView) {
súper(itemView);
imageView = itemView.findViewById (R.id.imagen);
nombre = itemView.findViewById (R.id.nombre);
etiqueta = itemView.findViewById (R.id.etiqueta);
distribución relativa = itemView.findViewById (R.id.articulo);
}
}
}
Implementación de RecyclerView en la actividad:
activity_main.xml
<?xml versión = «1.0» codificación = «utf-8»?>
<RelativeLayout xmlns: android = «http://schemas.android.com/apk/res/android»
xmlns: app = «http://schemas.android.com/apk/res-auto»
xmlns: tools = ”http://schemas.android.com/tools”
android: layout_width = «match_parent»
android: layout_height = «match_parent»
herramientas: contexto = ”. Actividad principal «
android: background = «# E9E9E9»><androidx.recyclerview.widget.RecyclerView
android: layout_width = «match_parent»
android: layout_height = «match_parent»
Android: id = ”@ + id / recyclerView”/></Disposición relativa>
MainActivity.java
paquete com.example.recyclerview;
importar androidx.appcompat.app.AppCompatActivity;
importar androidx.recyclerview.widget.LinearLayoutManager;
importar androidx.recyclerview.widget.RecyclerView;importar android.os.Bundle;
importar java.util.ArrayList;
importar java.util.List;clase pública Actividad principal se expande AppCompatActivity {
RecyclerView reciclador;
Lista modelList;
RecyclerView.Adapter adaptador;@Transcripción
vacío protegido onCreate (Bundle SavedInstanceState) {
súper.onCreate (SavedInstanceState);
setContentView (R.layout.activity_main);modelList = Nuevo ArrayList ();
reciclador = findViewById (R.id.recicladorView);
reciclador.setHasFixedSize (real);
reciclador.setLayoutManager (Nuevo LinearLayoutManager (esta));
// llama a nuestros artículos
modelList.añadir(Nuevo Modelo (R.drawable.manzana,«Y»,«Y para Apple»));
modelList.añadir(Nuevo Modelo (R.drawable.pelota,«SEGUNDO»,«B de pelota»));
modelList.añadir(Nuevo Modelo (R.drawable.gato,«C»,«C para gato»));
modelList.añadir(Nuevo Modelo (R.drawable.Burro,«RE»,«D para burros»));
modelList.añadir(Nuevo Modelo (R.drawable.elefante,«MI»,«E de elefante»));
modelList.añadir(Nuevo Modelo (R.drawable.Pescado,«F»,«F de pescado»));
modelList.añadir(Nuevo Modelo (R.drawable.cabra,«GRAMO»,«G para una cabra»));
modelList.añadir(Nuevo Modelo (R.drawable.gorra,H,«H de sombrero»));
modelList.añadir(Nuevo Modelo (R.drawable.tinta,«YO»,«Yo por la tinta»));
modelList.añadir(Nuevo Modelo (R.drawable.lanzador,«J»,J de Sur));
// inicializa el adaptador con una lista de modelos y contexto
adaptador = Nuevo Adaptador personalizado (modelList, getApplicationContext ());
// establece el adaptador en recyclerView
reciclador.setAdapter (adaptador);
}
}