RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能;
导入依赖:
recyclerView是design包下的,所以要导入design依赖
implementation 'com.android.support:design:28.0.0'
1
布局XML
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler_top">
</android.support.v7.widget.RecyclerView>
1
2
3
4
5
6
布局管理器&适配器:
布局管理器
①线性 LinearLayoutManager
②网格 GridLayoutManager
③瀑布流 StaggeredGridLayoutManager
//*布局管理器
StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.HORIZONTAL);
recyclerTop.setLayoutManager(manager);
List<TopBean.DataBean> list = data;
//适配器
TopAdapter topAdapter = new TopAdapter(getActivity(),list);
recyclerTop.setAdapter(topAdapter);
1
2
3
4
5
6
7
适配器内部
adapter继承recyclerView的适配器,以及ViewHolder
实现了onCreateViewHolder,onBindViewHolder,getItemCount方法
public class TopAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
1
getItemCount方法:
public int getItemCount() {
return data.size();
}
1
2
3
onCreateViewHolder方法:加载布局创建寄存器,并且返回寄存器到onBindViewHolder
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
//加载布局
View view = LayoutInflater.from(activity).inflate(R.layout.top, viewGroup, false);
//将视图放入viewHolder
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
1
2
3
4
5
6
7
8
onBindViewHolder方法:获取寄存器中的组件,给组件设置数据
展示网络图片,用图片框架Glide,设置圆角图片
//设置圆角
RoundedCorners roundedCorners = new RoundedCorners(4);
//通过RequestOptions扩展功能,override:采样率,因为ImageView就这么大,可以压缩图片,降低内存消耗
RequestOptions override = RequestOptions.bitmapTransform(roundedCorners).override(100, 100);
ImageView imageView = ((MyViewHolder) viewHolder).imageView;
Glide.with(activity).load(data.get(i).getIcon()).apply(override).into(imageView);
1
2
3
4
5
6
寄存器ViewHolder(自建的):
class MyViewHolder extends RecyclerView.ViewHolder{
TextView textView;
ImageView imageView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
//加载组件
textView = itemView.findViewById(R.id.top_Text);
imageView = itemView.findViewById(R.id.top_img);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
ps:如果原生的适配器理解了部分功能后,可以使用BaseRecyclerViewAdapter框架
---------------------
转载,仅作分享,侵删
作者:Lemon .
原文:https://blog.csdn.net/weixin_43807869/article/details/85555684
|
|