Android开发----RecyclerView视图的学习
RecyclerView
RecyclerView是什么?
RecyclerView是如今Android开发中最常用的控件,其相较于ListView和GridView的功能更为强大,优化了两者的各种不足,同时可以开发出各种View。
RecyclerView实现ListView
新建一个Empty Activity
名为LinearRecyclerView
先做好前提准备,定义布局文件activity_linear_recycler_view.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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/rv_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"/>
</RelativeLayout>
新建一个LinearAdapt.java
确定布局后,您需要实现 Adapter
和 ViewHolder
。这两个类配合使用,共同定义数据的显示方式。ViewHolder
是包含列表中各列表项的布局的 View
的封装容器。Adapter
会根据需要创建 ViewHolder
对象,还会为这些视图设置数据。将视图与其数据相关联的过程称为“绑定”。
定义 Adapter 时,您需要替换三个关键方法:
-
onCreateViewHolder()
:每当 RecyclerView 需要创建新的 ViewHolder 时,它都会调用此方法。此方法会创建并初始化 ViewHolder 及其关联的 View,但不会填充视图的内容,因为 ViewHolder 此时尚未绑定到具体数据。 -
onBindViewHolder()
:RecyclerView 调用此方法将 ViewHolder 与数据相关联。此方法会提取适当的数据,并使用该数据填充 ViewHolder 的布局。例如,如果 RecyclerView 显示的是一个名称列表,该方法可能会在列表中查找适当的名称,并填充 ViewHolder 的 TextView widget。 -
getItemCount()
:RecyclerView 调用此方法来获取数据集的大小。例如,在通讯簿应用中,这可能是地址总数。RecyclerView 使用此方法来确定什么时候没有更多的列表项可以显示。
public class LinearAdapter extends RecyclerView.Adapter<LinearAdapter.LinearViewHolder> {
private Context context;
private OnItemClickListener listener;
public LinearAdapter(Context context, OnItemClickListener listener) {
this.context = context;
this.listener = listener;
}
@NonNull
@Override
public LinearAdapter.LinearViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new LinearViewHolder(LayoutInflater.from(context).inflate(R.layout.activity_linear_recycler,parent,false));
}
@Override
public void onBindViewHolder(@NonNull LinearAdapter.LinearViewHolder holder, final int position) {
holder.textView.setText("Hello World");
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(context,"click...."+position,Toast.LENGTH_SHORT).show();
listener.onClick(position);
}
});
}
@Override
public int getItemCount() {
return 30;
}
class LinearViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
public LinearViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.tvv_1);
}
}
public interface OnItemClickListener{
void onClick(int pos);
}
}
再创建一个新的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvv_1"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:textColor="#000"
android:text="asdasda"/>
</LinearLayout>
准备工作做好之后,我们就可以开始为控件写活动了
public class LinearRecyclerViewActivity extends AppCompatActivity {
private RecyclerView mrvmain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linear_recycler_view);
mrvmain = findViewById(R.id.rv_main);
mrvmain.setLayoutManager(new LinearLayoutManager(LinearRecyclerViewActivity.this));
mrvmain.addItemDecoration(new MyDecoration());
mrvmain.setAdapter(new LinearAdapter(LinearRecyclerViewActivity.this, new LinearAdapter.OnItemClickListener() {
@Override
public void onClick(int pos) {
Toast.makeText(LinearRecyclerViewActivity.this,"click...."+pos,Toast.LENGTH_SHORT).show();
}
}));
}
class MyDecoration extends RecyclerView.ItemDecoration{
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(0,0,0,getResources().getDimensionPixelOffset(R.dimen.dividerHight));
}
}
}
效果展示如图: