失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Recyclerview基础 接口回调点击事件 多布局 随机值生成瀑布流

Recyclerview基础 接口回调点击事件 多布局 随机值生成瀑布流

时间:2021-05-30 11:20:04

相关推荐

Recyclerview基础 接口回调点击事件 多布局 随机值生成瀑布流

第1天Recyclerview基础

Recyclerview

一.效果:线性/网格/瀑布流

二.重要的方法

三.RecyclerView的使用

四.代码

五.实现多布局只给出适配器代码:微信通讯录页面

六.随机高度瀑布流

1.适配器代码:

2.item行布局ImageView添加的属性

七.XRecyclerview的使用:上拉加载 下拉刷新

1.XRecyclerView和Recyclerview的区别:

2.XRecyclerView用法:

3.XRecyclerView常见方法:

Recyclerview

RecyclerView比ListView的优势:

1.RecyclerView比listview实现效果更多

2.RecycelrView支持多布局;

3.RecyclerView根据项目需要插拔功能

RecyclerView默认不支持点击事件->程序员代码中通过回调接口的方式添加监听

一.效果:线性/网格/瀑布流

二.重要的方法

1.RecyclerView横向滑动:

LinearLayoutManager.HORIZONTAL横向滑动LinearLayoutManager.VERTICAL垂直滑动

2.RecyclerView.Adapter中刷新方法区别:

notifyDataSetChanged();整体刷新 没有动画效果

notifyItemInserted(int position,Object data):有动画效果 添加一条数据在position位置

notifyItemRemoved(position);有动画效果 删除一条数据并刷新

注意:当添加和删除的时候,要更新下标,不然有错位现象

3.RecyclerView多布局展示:

public int getItemViewType(int position)返回当前数据的itemview类型

4.RecyclerView常见方法:

LinearLayoutManager:recyclerview线性管理器(垂直水平方向);

GridLayoutManager:网格布局管理器;

StaggeredGridLayoutManager:瀑布流布局管理器;

RecyclerView.setLayoutManager(LayoutManager manager):添加布局管理器

RecyclerView.addItemDecoration(ItemDecoration decoration):添加分割线

RecyclerView.setItemAnimator(ItemAnimator animator):添加动画方法

RecyclerView.setAdapter(Adapter adapter):添加适配器

三.RecyclerView的使用

1.gradle中导入Recyclerview引用;

implementation "com.android.support:recyclerview-v7:28.0.0‘自己搜索导入

2.适配器:

(1)RecyclerView.Adapter<范型> 重写3个方法

onCreateViewHolder:创建ViewHolder

onBindViewHolder:绑定数据

getItemCount

(2)RecyclerView.ViewHolder

四.代码

(1)布局activity_main.xml:

<android.support.v7.widget.RecyclerView

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:id="@ id/main_RV"/>

(2)Java代码:MainActivity.java

public class MainActivity extends AppCompatActivity implements MainAdapter.MainItemClickLisener{

private RecyclerView rv;//控件

private ArrayList list=new ArrayList<>();//数据源

private MainAdapter mainAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

rv=findViewById(R.id.rv);

list.add(new Student(“A”,R.drawable.f1));

list.add(new Student(“A”,R.drawable.f2));

list.add(new Student(“A”,R.drawable.f3));

list.add(new Student(“A”,R.drawable.f4));

list.add(new Student(“A”,R.drawable.image1));

mainAdapter=new MainAdapter(list,this);

//TODO 1:设置布局管理器

//线性布局

final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);

linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);

//网格布局

GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);

//瀑布流布局:一般和图片结合使用,自适应图片的高度

StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);

rv.setLayoutManager(linearLayoutManager);

//TODO 2:设置分割线

DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);

rv.addItemDecoration(dividerItemDecoration);

//TODO 3:设置动画

DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator();

defaultItemAnimator.setRemoveDuration(2000);//设置延迟2秒删除的效果

defaultItemAnimator.setAddDuration(2000);

rv.setItemAnimator(defaultItemAnimator);

//TODO 4:设置点击事件 mainAdapter.setOnItemClickListener(this); rv.setAdapter(mainAdapter);}@Overridepublic void ItemClick(int position){ //删除数据 list.remove(i); notifyItemRemoved(i);//具有动画效果 删除数据 //产生删除错位现象----->重新整理item的下表 notifyItemRangeChanged(0,list.size());//从0开始整理list集合的长度个}

}

(3)适配器代码:MainAdapter.java

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> {

private ArrayList list;

private Context context;

public MainAdapter(ArrayList<Student> list, Context context) { this.list = list; this.context = context;}//TODO 3:创建ViewHolder@NonNull@Overridepublic MainViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(context).inflate(R.layout.item_main, null); return new MainViewHolder(view);}//TODO 4:绑定每条数据:填充数据@Overridepublic void onBindViewHolder(@NonNull MainViewHolder mainViewHolder, final int i) { mainViewHolder.iv_pic.setImageResource(list.get(i).getPicId()); mainViewHolder.tv_name.setText(list.get(i).getName() ""); //给item设置点击事件 mainViewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {

// Toast.makeText(context, “” i, Toast.LENGTH_SHORT).show();

// //删除数据

// list.remove(i);

// notifyItemRemoved(i);//具有动画效果 删除数据

// //产生删除错位现象----->重新整理item的下表

// notifyItemRangeChanged(0,list.size());//从0开始整理list集合的长度个

//不要在这里做处理,采用接口回调

lisener.ItemClick(i);

}

});

}

//TODO 2:返回集合的个数

@Override

public int getItemCount() {

return list.size();

}

//TODO 1:自定义ViewHolder类

class MainViewHolder extends RecyclerView.ViewHolder{

private ImageView iv_pic;//默认值是null

private TextView tv_name;

public MainViewHolder(@NonNull View itemView) {

super(itemView);

this.iv_pic=itemView.findViewById(R.id.iv_pic);

this.tv_name=itemView.findViewById(R.id.tv_name);

}

}

//监听器

private MainItemClickLisener lisener;

//设置监听方法:将摄像头安装在31206

public void setOnItemClickListener(MainItemClickLisener listener){

this.lisener=listener;

}

//定义监听的接口:摄像头

interface MainItemClickLisener{

//一有动静就会调用该方法

public void ItemClick(int position);

}

}

五.实现多布局只给出适配器代码:微信通讯录页面

/**

RecyclerView.ViewHolder:由于进行多布局操作

需要多个ViewHolder对象对应过个xml布局

自定义ViewHolder父类

*/

public class SecondAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

private List<PhoneBean>list = new ArrayList<>();public void refresh(List<PhoneBean>list){ this.list.addAll(list); notifyDataSetChanged();}//根据list中按position获取的type值返回//返回数据以参数的是形式onCreateViewHolder第二参数@Overridepublic int getItemViewType(int position) { return list.get(position).type;}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = null; LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext()); if (i==0){ view = inflater.inflate(R.layout.item_title,viewGroup,false); return new TitleViewHolder(view); }else { view = inflater.inflate(R.layout.item_values,viewGroup,false); return new PhoneViewHolder(view); }}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { if (list.get(i).type==0){ //首字母 TitleViewHolder vh = (TitleViewHolder) viewHolder; vh.mTitle.setText(list.get(i).title); }else { //联系人详情 PhoneViewHolder vh = (PhoneViewHolder) viewHolder; vh.mName.setText(list.get(i).name); vh.mPhone.setText(list.get(i).phone); }}@Overridepublic int getItemCount() { return list.size();}//多布局操作->1布局对应1ViewHolder//首字母布局对应的ViewHolderclass TitleViewHolder extends RecyclerView.ViewHolder{ TextView mTitle; public TitleViewHolder(@NonNull View itemView) { super(itemView); mTitle = itemView.findViewById(R.id.title_Tv); }}//联系人详情对应的ViewHolderclass PhoneViewHolder extends RecyclerView.ViewHolder{ TextView mName; TextView mPhone; public PhoneViewHolder(@NonNull View itemView) { super(itemView); mName = itemView.findViewById(R.id.name1_Tv); mPhone = itemView.findViewById(R.id.phone1_Tv); }}

}

六.随机高度瀑布流

1.适配器代码:

2.item行布局ImageView添加的属性

七.XRecyclerview的使用:上拉加载 下拉刷新

1.XRecyclerView和Recyclerview的区别:

从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传统的ListView,更加强大和灵活.

1

2.XRecyclerView用法:

1.gradle中导入XRecyclerview引用;

implementation ‘com.android.support:recyclerview-v7:28.0.0’

api(‘com.jcodecraeer:xrecyclerview:1.5.9’) {

exclude group: ‘com.android.support’

}

2.其他和Recyclerview一样

3.XRecyclerView常见方法:

来源:/content-4-302701.html

如果觉得《Recyclerview基础 接口回调点击事件 多布局 随机值生成瀑布流》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。