标准的适配器
1.适配器代码
/**
适配器提供多个方法:
1。设置新的数据源
2。在原来的数据源中删除数据
3。在原来的数据源中追加数据
4。设置点击和长按事件监听
*/
public class MainAdappter extends RecyclerView.Adapter<MainAdappter.MainViewHodler>{
private Context context;
private ArrayList<Student> list;//数据源
public MainAdappter(Context context, ArrayList<Student> list) {
this.context = context;
this.list = list;
}
//设置新的数据源
public void refresh(ArrayList<Student> list){
this.list.clear();
this.list.addAll(list);
notifyDataSetChanged();
}
//增加数据方法
public void add(ArrayList<Student> list){
this.list.addAll(list);
notifyDataSetChanged();
}
//删除数据方法
public void remove(int index){
list.remove(index);//数据源中移除点击这条数据
//删除动画效果
notifyItemRemoved(index);
//RecyclerView BUG->索引错位->notifyItemRangeChanged->重新绑定索引位置
notifyItemRangeChanged(0,list.size());
}
@NonNull
@Override
public MainViewHodler onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new MainViewHodler(LayoutInflater.from(context).inflate(R.layout.item_main,viewGroup,false));
}
//绑定数据
@Override
public void onBindViewHolder(@NonNull MainViewHodler mainViewHodler, final int i) {
mainViewHodler.tv_name.setText(list.get(i).getName()+"");
mainViewHodler.tv_age.setText(list.get(i).getAge()+"");
//设置item的点击事件
mainViewHodler.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//接口回调
itemClick.itemClick(i);
}
});
//设置item的长按事件
mainViewHodler.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
//接口回调
itemClick.itemLongClick(i);
return true;
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class MainViewHodler extends RecyclerView.ViewHolder{
private TextView tv_name;
private TextView tv_age;
public MainViewHodler(@NonNull View itemView) {
super(itemView);
tv_age=itemView.findViewById(R.id.tv_age);
tv_name=itemView.findViewById(R.id.tv_name);
}
}
//接口回调用的接口
private ItemClick itemClick;
public void setItemClick(ItemClick itemClick){
this.itemClick=itemClick;
}
interface ItemClick{
public void itemClick(int position);
public void itemLongClick(int position);
}
}
2.Activity代码
/**
*
* 1.导入依赖:implementation 'com.android.support:recyclerview-v7:28.0.0'
* 2.控件 适配器 数据源
* 3.设置属性:
* 设置布局管理器
* 设置分割线
* 设置动画
* 设置横向还是纵向滑动
* 设置item点击事件(接口回调)
* 4.设置多种布局
* 5.万能适配器
* 6.XRecyclerView
* */
public class MainActivity extends AppCompatActivity {
private RecyclerView rv;
private ArrayList<Student> list=new ArrayList<>();
private MainAdappter mainAdappter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initview();
initdata();
}
private void initview() {
rv=findViewById(R.id.rv);
//1.设置布局管理器,必须设置
LinearLayoutManager manager = new LinearLayoutManager(this);
manager.setOrientation(LinearLayoutManager.VERTICAL);
rv.setLayoutManager(manager);
//2.设置分割线,并设置颜色
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
rv.addItemDecoration(dividerItemDecoration);
//3.设置动画,每隔1秒切换一次
DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator();
defaultItemAnimator.setAddDuration(3000);//设置增加动画
defaultItemAnimator.setRemoveDuration(3000);//设置删除动画
rv.setItemAnimator(defaultItemAnimator);
//4.设置适配器:里面没有数据
mainAdappter=new MainAdappter(this,list);
rv.setAdapter(mainAdappter);
//5.设置长按和点击事件
mainAdappter.setItemClick(new MainAdappter.ItemClick() {
//点击删除数据
@Override
public void itemClick(int position) {
mainAdappter.remove(position);
}
//长按增加数据
@Override
public void itemLongClick(int position) {
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("c",12));
students.add(new Student("d",12));
students.add(new Student("b",12));
students.add(new Student("c",12));
students.add(new Student("d",12));
mainAdappter.add(students);//追加数据
}
});
}
private void initdata() {
list.add(new Student("c",12));
list.add(new Student("d",12));
list.add(new Student("b",12));
list.add(new Student("c",12));
list.add(new Student("d",12));
list.add(new Student("c",12));
list.add(new Student("d",12));
list.add(new Student("b",12));
list.add(new Student("c",12));
list.add(new Student("d",12));
//填充新的数据源
mainAdappter.refresh(list);
}
}