第七单元 Recyclerview的基本使用与封装

7.1. RecyclerView基本使用

  • 7.1. RecyclerView基本使用

    7.1.1.RecyclerView简介
    7.1.2.RecyclerView的基本用法
    7.1.3.分割线
    7.1.4.增加删除动画
    7.1.5.RecyclerView优点

  • 7.3. RecyclerView万能适配器封装

  • 7.4. RecyclerView事件处理

    7.4.1.点击事件

RecyclerView是什么

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

RecyclerView简介

RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能

RecyclerView的基本用法

MainActivity的代码
线性列表LinearLayoutManager

LinearLayoutManager manager=newLinearLayoutManager(this);
manager.setOrientation(LinearLayoutManager.VERTICAL);//列表

GridLayoutManager网格

GridLayoutManager gridLayoutManager=new GridLayoutManager(this,3);//网格
recyclerView.setLayoutManager(manager);

StaggeredGridLayoutManager瀑布流

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

分割线

recyclerView.addItemDecoration(dividerItemDecoration);//分割线

增加删除动画

 recyclerView.setItemAnimator(defaultItemAnimator);//设置删除和添加的动作
        DividerItemDecoration dividerItemDecoration=new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);

RecyclerView优点

RecyclerView比ListView的优势:
1.RecyclerView比listview实现效果更多
2.RecycelrView支持多布局;
3.RecyclerView根据项目需要插拔功能

RecyclerView万能适配器封装

package com.example.recyclerview;

import android.content.Context;
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 android.widget.Toast;

import java.util.ArrayList;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    ArrayList<Integer> strings;
    Context context;

    public MyAdapter(ArrayList<Integer> strings, Context context) {
        this.strings = strings;
        this.context = context;
    }

    public MyAdapter(ArrayList<Integer> strings) {
        this.strings = strings;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View itemView = LayoutInflater.from(context).inflate(R.layout.list, null);
        MyViewHolder viewHolder=new MyViewHolder(itemView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
        int hightValue =(int)Math.random()*801+500;
        ViewGroup.LayoutParams layoutParams = (ViewGroup.LayoutParams) myViewHolder.imageView.getLayoutParams();
        myViewHolder.imageView.setLayoutParams(layoutParams);
        layoutParams.height = hightValue;
        myViewHolder.imageView.setImageResource(strings.get(i));
            myViewHolder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context,"点一下!",Toast.LENGTH_SHORT).show();
                }
            });
            myViewHolder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //删除数据源
                    strings.remove(i);
                    //删除动画
                    notifyItemRemoved(i);
                    notifyItemRangeChanged(i,strings.size());
                }
            });
            myViewHolder.imageView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    strings.add(R.mipmap.ic_launcher);
                    notifyItemInserted(i);
                    return true;
                }
            });
    }

    @Override
    public int getItemCount() {
        return strings.size();
    }
    class  MyViewHolder extends RecyclerView.ViewHolder{
        TextView textView; ImageView imageView;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.image);
        }
    }
}

RecyclerView事件处理

package com.example.recyclerview;

import android.graphics.Canvas;
import android.support.annotation.NonNull;
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 android.view.View;
import android.widget.LinearLayout;

import java.sql.Driver;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = findViewById(R.id.recyclerView);

//        LinearLayoutManager manager=new LinearLayoutManager(this);
//        manager.setOrientation(LinearLayoutManager.VERTICAL);//列表
//        GridLayoutManager gridLayoutManager=new GridLayoutManager(this,3);//网格
//        recyclerView.setLayoutManager(manager);
        StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);



        ArrayList<Integer> strings=new ArrayList<>();
        strings.add(R.mipmap.aa);
        strings.add(R.mipmap.bb);
        strings.add(R.mipmap.cc);
        strings.add(R.mipmap.dd);
        strings.add(R.mipmap.ee);
        strings.add(R.mipmap.ff);
        strings.add(R.mipmap.gg);
        strings.add(R.mipmap.hh);
        strings.add(R.mipmap.jj);
        strings.add(R.mipmap.hh);
        strings.add(R.mipmap.ii);
        strings.add(R.mipmap.jj);
        strings.add(R.mipmap.kk);
        MyAdapter myAdapter=new MyAdapter(strings,this);
        recyclerView.setAdapter(myAdapter);
        DefaultItemAnimator defaultItemAnimator=new DefaultItemAnimator();
        defaultItemAnimator.setAddDuration(2000);
        defaultItemAnimator.setRemoveDuration(2000);
        recyclerView.setItemAnimator(defaultItemAnimator);//设置删除和添加的动作
        DividerItemDecoration dividerItemDecoration=new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
        recyclerView.addItemDecoration(dividerItemDecoration);//分割线

点击事件

   recycleriew.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        RecyclerView.ItemDecoration itemDecoration=new RecyclerView.ItemDecoration() {
            @Override
            public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
                super.onDraw(c, parent, state);
            }
        };

技能效果

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值