飞道的博客

回收视图 适配器:RecyclerView.Adapter

676人阅读  评论(0)

新建 java class

public class xxxAdapter extends RecyclerView.Adapter<xxxAdapter.LocalViewHolder> {
}
//xxxAdapter继承RecyclerView.Adapter

然后一路alt+回车,插入,将报错消除,出现了以下四个方法

1.LocalViewHolder(本地视图持有者) 继承于 RecyclerView.ViewHolder(回收视图的视图持有者)
注::视图持有者就是指 一个视图对应一个持有者

public class LocalViewHolder extends RecyclerView.ViewHolder {
	//这里声明
	public LocalViewHolder(@NonNull View itemView) {
		super(itemView);
		//这里绑定控件
	}
}

2.创建 LocalViewHolder(本地视图持有者)

@NonNull
@Override
public LocalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
	return new LocalViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_file,parent,false));
	/*设置布局文件*/
}
//此方法名看上去像onCreate生命周期,用于一开始的创建视图
//实际只会创建一个半屏幕的视图
//(如:一个屏幕能显示10个视图,就生成15个视图,对应15个视图持有者;原因:第16个视图会复用第1个的视图)
//参数  parent:视图组(布局文件)  viewType:视图类型(可以通过判断视图类型使用不同的视图组)
//还可以增加一个参数:List payloads,使用notifyItemChanged()刷新数据时可传入一个值给payloads,可以进行判断处理
//如:payloads.get(0) == ""||payloads.isEmpty()
//刷新数据可用于更新,也可用于复原(如:点击后此视图出现变化,点击另一个视图时,此视图复原)

2.绑定 LocalViewHolder(本地视图持有者)

@Override
public void onBindViewHolder(@NonNull LocalViewHolder holder, int position) {
	
}
//创建视图时,以及复用视图时都会运行此方法
//参数 holder:视图的持有者 position:当前视图的位置
//两个参数配合,给指定视图进行设置

3.得到 项目计数:其实就是设置要用视图去显示的对象的数量

@Override
public int getItemCount() {
	return 0;
}

在activity里使用回收视图

private RecyclerView mFileRv;//声明回收视图
private FileAdapter pFileAdapter;//声明回收视图的适配器
private void onInitialView() {
	mFileRv = findViewById(R.id.rv_file);/*绑定控件*/
	mFileRv.setAdapter(pFileAdapter);/*设置适配器*/
	mFileRv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));/*设置布局管理器*/
				//LinearLayoutManager:线性布局管理器
				//GridLayoutManager:网格布局管理器
				//StaggeredGridLayoutManager:瀑布流布局管理器
	mFileRv.setItemAnimator(new DefaultItemAnimator());/*设置视图的添加和移除动画*/
	mFileRv.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.HORIZONTAL));/*添加分割线*/
}

刷新

notifyDataSetChanged();// 全部刷新
notifyItemChanged(int position);// 局部刷新
notifyItemRangeChanged(int positionStart, int itemCount);// 刷新次数
notifyItemInserted(int position);// 插入并刷新(有动画)
notifyItemMoved(int fromPosition, int toPosition);// 刷新范围
notifyItemRemoved(int position);// 删除并刷新(有动画)
notifyItemRangeRemoved(int positionStart, int itemCount);// 批量删除并刷新

转载:https://blog.csdn.net/qq_34411066/article/details/105924561
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场