RecyclerView简单使用及多布局适配器

一、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);
        }
    }





}

多布局效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43841463/article/details/94765211