第7天 Recyclerview万能的适配器(基本使用、分割线、增加删除动画)

第7天 Recyclerview万能的适配器(基本使用、分割线、增加删除动画)

Recyclerview的使用

用了很长一段时间的RecyclerView,在项目中用的频率也越来越频繁(因为踩得坑也越来越多了),或过头来看,感觉一直在写RecyclerView.Adapter中的三个方法和一个内部类,感觉很浪费时间,那么今天我们来试着封装封装,来减少我们的使用在这里插入图片描述

思路

一、创建Bean类将想要的数据封装在其中
二、创建适配器
三、实现接口进行点击事件打的接口回调
四、实例化RecyclerView,设置适配器,设置瀑布流,并在适配器中点击使用接口回调的方法来实现点击事件的吐司。

代码

Bean类


class Bean {
    int pic;
    String string;

    public Bean(int pic, String string) {
        this.pic = pic;
        this.string = string;
    }

    public int getPic() {
        return pic;
    }

    public void setPic(int pic) {
        this.pic = pic;
    }

    public String getString() {
        return string;
    }

    public void setString(String string) {
        this.string = string;
    }
}

适配器

public class MyAdpter extends RecyclerView.Adapter<MyAdpter.MyViewHoler> {
    ArrayList<Bean> list;
    Context context;
    MyOnItemClickListener myOnItemClickListener;

    public void setMyOnItemClickListener(MyOnItemClickListener myOnItemClickListener) {
        this.myOnItemClickListener = myOnItemClickListener;
    }

    public MyAdpter(ArrayList<Bean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @NonNull
    @Override
    public MyViewHoler onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        final View view = LayoutInflater.from(context).inflate(R.layout.item, null);
        return new MyViewHoler(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final MyViewHoler myViewHoler, final int i) {
        myViewHoler.textView.setText(list.get(i).string);


        Glide.with(context).load(list.get(i).pic).apply(RequestOptions.bitmapTransform(new RoundedCorners(100))).into(myViewHoler.imageView);
        myViewHoler.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myOnItemClickListener.onItemClick(i);
            }
        });
        myViewHoler.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                myOnItemClickListener.onLongClickListener(i);
                return true;
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }


    //自定义类继承ViewHolder

    class MyViewHoler extends RecyclerView.ViewHolder{
        ImageView imageView;
        TextView textView;

        public MyViewHoler(@NonNull View itemView) {
            super(itemView);
            //itemView代表行布局
            imageView = itemView.findViewById(R.id.image1);
            textView = itemView.findViewById(R.id.text1);

        }
    }
}

接口

public interface MyOnItemClickListener {
    public void onItemClick(int positon);
    public void onLongClickListener(int positon);
}

item布局


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    android:layout_margin="10dp"
    >
    <ImageView
        android:scaleType="fitXY"
        android:id="@+id/image1"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="#7CE3E3E4"/>
    <TextView
        android:id="@+id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#C8C8CC"/>

</LinearLayout>

activity_main布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

</LinearLayout>

MainActivity代码



RecyclerView recyclerView;
    MyAdpter myAdpter;
    ArrayList<Bean> list = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = findViewById(R.id.rv);

        list.add(new Bean(R.mipmap.cat,"范德萨发舒服撒啊对发范德萨萨发大事发生大的感觉撒哎哈佛I个"));
        list.add(new Bean(R.mipmap.cat1,"范德萨发舒服撒啊对发生的范德萨发fdsaaf讽德诵功大事发生大的感觉撒哎哈佛I个"));
        list.add(new Bean(R.mipmap.dog,"范德萨发舒服撒啊fds大的感觉撒哎哈佛I个"));
        list.add(new Bean(R.mipmap.dog2,"范德萨发舒法师答复fds大事发生大的感觉撒哎哈佛I个"));
        list.add(new Bean(R.mipmap.mao,"范德萨发舒服撒啊工地发生过的对发生的范德萨fsdafas发大事发生大的感觉撒哎哈佛I个"));
        list.add(new Bean(R.mipmap.mao2,"范德萨发舒服规范的是谁撒啊对发生的范德萨fsdafas发大事发生大的感觉撒哎哈佛I个"));
        list.add(new Bean(R.mipmap.tozi,"范德不想做服规范的是谁撒啊对发生的范德萨fsdafas发大事发生大的感觉撒哎哈佛I个"));
        final MyAdpter myAdpter = new MyAdpter(list, this);
        myAdpter.setMyOnItemClickListener(new MyOnItemClickListener() {//重写点击事件
            @Override
            public void onItemClick(int positon) {
//                list.remove(positon);
//                myAdpter.notifyItemRemoved(positon);//具有动画的删除效果
//                myAdpter.notifyDataSetChanged();
                Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show();
                final Bean bean = list.get(positon);
                bean.setString("afdasfasdfasfasd");
                myAdpter.notifyItemChanged(positon);//修改

            }

            @Override
            public void onLongClickListener(int positon) {//重写长点击点击事件
                Toast.makeText(MainActivity.this, "长按了"+positon, Toast.LENGTH_SHORT).show();
            }
        });
        recyclerView.setAdapter(myAdpter);
//        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//        GridLayoutManager gridLayoutManager = new GridLayoutManager(this,2);
        final StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);

        recyclerView.setLayoutManager(staggeredGridLayoutManager);

//        添加分割线
        final DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
        recyclerView.addItemDecoration(dividerItemDecoration);
        //item点击事件
        //添加动画
        final DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator();
//        defaultItemAnimator.setRemoveDuration(2000);//缓慢删除
        defaultItemAnimator.setChangeDuration(2000);//缓慢修改
        recyclerView.setItemAnimator(defaultItemAnimator);

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值