一、RecyclerView的优势
1.RecyclerView比listView的优势多
2.RecyclerView比listview的实现效果多
3.Recyclerview支持多布局
4.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):添加动画方法
代码如下:
package com.example.as3_day01;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements Base.MainItemClickLisener {
RecyclerView rv;
ArrayList<Student> list = new ArrayList<>();
Base base;
@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.mipmap.zhu1));
list.add(new Student("B",R.mipmap.zhu2));
list.add(new Student("C",R.mipmap.zhu3));
list.add(new Student("D",R.mipmap.zhu4));
list.add(new Student("E",R.mipmap.zs));
base = new Base(this, list);
//线性布局
// LinearLayoutManager layoutManager = new LinearLayoutManager(this);
// layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
// rv.setLayoutManager(layoutManager);
// //网格布局
// GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
// rv.setLayoutManager(gridLayoutManager);
// //瀑布流布局 一般和图片结合使用
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
rv.setLayoutManager(staggeredGridLayoutManager);
rv.setAdapter(base);
//设置分割线
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
rv.addItemDecoration(dividerItemDecoration);
//设置动画
DefaultItemAnimator animator = new DefaultItemAnimator();
animator.setRemoveDuration(2000);//设置延迟2秒后删除效果
animator.setAddDuration(2000);
rv.setItemAnimator(animator);
base.setItemClickListener(this);
}
@Override
public void ItemClick(int position) {
list.remove(position); //删除数据
base.notifyItemRemoved(position);//具有动画效果+删除
// 产生删除错位现象 ---> 重新整理集合下标
base.notifyItemChanged(0,list.size());
}
}
适配器
package com.example.as3_day01;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class Base extends RecyclerView.Adapter<Base.MainHolder> {
MainActivity mt;
ArrayList<Student> list;
public Base(MainActivity mt, ArrayList<Student> list) {
this.mt = mt;
this.list = list;
}
@NonNull
@Override
public MainHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
//创建viewHolder
View view = LayoutInflater.from(mt).inflate(R.layout.layout1, null);
return new MainHolder(view);
}
//绑定每条数据 填充数据
@Override
public void onBindViewHolder(@NonNull MainHolder mainHolder, final int i) {
mainHolder.tv_mess.setText(list.get(i).getName());
mainHolder.imgs.setImageResource(list.get(i).getPic());
mainHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//接口回调方法
lisener.ItemClick(i);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class MainHolder extends RecyclerView.ViewHolder {
private TextView tv_mess;
private ImageView imgs;
public MainHolder(@NonNull View itemView) {
super(itemView);
this.tv_mess=itemView.findViewById(R.id.tv_mess);
this.imgs=itemView.findViewById(R.id.imgs);
ViewGroup.LayoutParams layoutParams = imgs.getLayoutParams();
int v = (int) ((Math.random() * 300) + 300);
layoutParams.height=v;
imgs.setLayoutParams(layoutParams);
}
}
private MainItemClickLisener lisener;
public void setItemClickListener(MainItemClickLisener lisener) {
this.lisener = lisener;
}
interface MainItemClickLisener{
public void ItemClick(int position);
}
}
效果
多布局适配器
package com.example.as3_day01_duobuju;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
public class ReycclerView_Duo extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
MainActivity mt;
ArrayList<Bean> list;
public ReycclerView_Duo(MainActivity mt, ArrayList<Bean> list) {
this.mt = mt;
this.list = list;
}
@Override
public int getItemViewType(int position) {
return list.get(position).getType();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
if(i==0){
View inflate = LayoutInflater.from(mt).inflate(R.layout.layout1, viewGroup, false);
return new titleViewHolder(inflate);
}else{
View inflate = LayoutInflater.from(mt).inflate(R.layout.layout2, viewGroup, false);
return new PhoneViewHolder(inflate);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if(list.get(i).getType()==0){
titleViewHolder titleViewHolder= (ReycclerView_Duo.titleViewHolder) viewHolder;
titleViewHolder.tv_title.setText(list.get(i).getTitlename());
}else{
PhoneViewHolder phoneViewHolder= (PhoneViewHolder) viewHolder;
phoneViewHolder.tv_name.setText(list.get(i).getName());
}
}
@Override
public int getItemCount() {
return list.size();
}
public class titleViewHolder extends RecyclerView.ViewHolder{
private TextView tv_title;
public titleViewHolder(@NonNull View itemView) {
super(itemView);
tv_title=itemView.findViewById(R.id.tv_title);
}
}
public class PhoneViewHolder extends RecyclerView.ViewHolder{
private TextView tv_name;
public PhoneViewHolder(@NonNull View itemView) {
super(itemView);
tv_name=itemView.findViewById(R.id.tv_name);
}
}
}