第1天:标准的适配器

标准的适配器

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



}

猜你喜欢

转载自blog.csdn.net/qq_34178710/article/details/88425318