Recycler es un nuevo diseño de vista circular propuesto por Android después de la versión 5.0, y se ha utilizado comúnmente en nuestro desarrollo. Hoy resumiré RecyclerView. Este artículo es un uso básico de Recycler.
1. Dependencia de RecyclerView
implementation 'com.android.support:recyclerview-v7:28.0.0'
Dependencias en androidx
implementation 'androidx.recyclerview:recyclerview:1.0.0'
Todos eligen según el entorno específico.
2. Métodos comunes de RecyclerView
- setAdapter: establece el adaptador del elemento de la lista. El adaptador usa RecyclerView.Adapter.
- setLayoutManager: establece el administrador de diseño del elemento de la lista, incluido el administrador de diseño lineal LinearLayoutManager, el administrador de diseño de cuadrícula GridLayoutManager, el administrador de diseño de cuadrícula en cascada StaggeredGridLayoutManager.
- addItemDecoration: agregue la línea divisoria del elemento de la lista.
- removeItemDecoration: elimina la línea divisoria del elemento de la lista.
- setItemAnimator: establece la animación de adición y eliminación de elementos de la lista. La animación predeterminada es DefaltItemAnimator que viene con el sistema.
- addOnItemTouchListener: agregue un detector táctil para los elementos de la lista. Debido a que RecyclerView no implementa la interfaz de clic de los elementos de la lista, los desarrolladores pueden monitorear los gestos del usuario a través del oyente táctil aquí.
- removeOnItemTouchListener: Elimina el detector táctil para el elemento de la lista.
- scorllToPosition: desplácese hasta la posición especificada.
3.Métodos relacionados con ReccyclerView.Adapter
<1> Métodos que deben reescribirse para adaptadores personalizados
- getItemCount: Obtiene el número de elementos de la lista.
- onCreateViewHolder: crea el titular de la vista de todo el diseño. Los parámetros de entrada incluyen el tipo de vista, y se pueden cargar diferentes diseños de acuerdo con el tipo de vista, para realizar el diseño de la lista encabezada.
- onBindViewHolder: vincula el titular de la vista de cada elemento.
<2> Método que se puede reescribir o no
- getItemViewType: devuelve el tipo de vista de cada elemento. Este tipo de vista es utilizado por el método onCreateViewHolder.
- getItemId: obtiene el número de cada elemento.
<3> Métodos que se pueden llamar directamente
- notifyItemInserted: notifica al adaptador que se ha insertado un nuevo elemento en la posición especificada.
- notifyItemRemoved: notifica al adaptador que el elemento original se ha eliminado en la ubicación especificada.
- notificarItemChanged: notifica al adaptador que el artículo en la posición especificada ha cambiado.
- notifyDataSetChanged: notifica al adaptador que los datos de la lista completa han cambiado.
4. Ejemplo de uso
Ver diseño activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"/>
</LinearLayout>
Diseño de elementos de lista item_recycler.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:src="@mipmap/aaa" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:text="这是一行文字"
android:textColor="#000000"
android:textSize="20sp" />
</LinearLayout>
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"
android:layout_marginTop="5dp"/>
</LinearLayout>
Adaptador HomeAdapter.java
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{
private Context mContext;
public HomeAdapter(Context mContext) {
this.mContext = mContext;
}
/**
* 引入布局
* @param viewGroup
* @param i
* @return
*/
@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_recycler,viewGroup,false));
return holder;
}
/**
* 为控件绑定数据
* @param myViewHolder
* @param i
*/
@Override
public void onBindViewHolder(MyViewHolder myViewHolder, int i) {
myViewHolder.tv.setText("这是第"+i+"行");
if (i%2 == 0){
myViewHolder.iv.setImageResource(R.mipmap.aaa);
}else{
myViewHolder.iv.setImageResource(R.mipmap.bbb);
}
if (i == 19){
myViewHolder.view.setVisibility(View.GONE);
}else{
myViewHolder.view.setVisibility(View.VISIBLE);
}
}
/**
* 返回项个数
* @return
*/
@Override
public int getItemCount() {
return 20;
}
/**
* 定义控件并初始化
*/
class MyViewHolder extends RecyclerView.ViewHolder{
TextView tv;
ImageView iv;
View view;
public MyViewHolder(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);
iv = itemView.findViewById(R.id.iv);
view = itemView.findViewById(R.id.view);
}
}
}
Utilice la configuración MainActivity.java en la actividad
public class MainActivity extends AppCompatActivity {
private RecyclerView recycler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recycler = findViewById(R.id.recycler);
//设置布局管理器
recycler.setLayoutManager(new LinearLayoutManager(this));
//设置item增加和删除时的动画
recycler.setItemAnimator(new DefaultItemAnimator());
HomeAdapter mAdapter = new HomeAdapter(this);
recycler.setAdapter(mAdapter);
}
}
Este es el más fácil de completar con RecyclerView. Más adelante se presentarán algunos otros métodos de uso.