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

  • 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@Overridepublic MyViewHoler onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {final View view = LayoutInflater.from(context).inflate(R.layout.item, null);return new MyViewHoler(view);}@Overridepublic 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() {@Overridepublic void onClick(View v) {myOnItemClickListener.onItemClick(i);}});myViewHoler.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {myOnItemClickListener.onLongClickListener(i);return true;}});}@Overridepublic int getItemCount() {return list.size();}//自定义类继承ViewHolderclass 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"?>
<LinearLayoutxmlns: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"><ImageViewandroid:scaleType="fitXY"android:id="@+id/image1"android:layout_width="match_parent"android:layout_height="200dp"android:background="#7CE3E3E4"/><TextViewandroid: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.RecyclerViewandroid: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<>();@Overrideprotected 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() {//重写点击事件@Overridepublic 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);//修改}@Overridepublic 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);}

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

  1. Android RecyclerView设置分割线 / 下拉加载 / 选项菜单进行增加删除动画

    首先看一下我的整个程序: 主类: package com.example.day02rk;import android.os.Bundle; import android.support.v4.con ...

  2. RecyclerView万能全套大宝剑

    1.万能Adapter: package xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxximport android.content.Context import andro ...

  3. listview-android:打造万能通用适配器(转)

    转载:https://blog.csdn.net/q649381130/article/details/51781921: 1.前言 listview作为安卓项目中一个的明星控件,它的适配器的写法是广 ...

  4. android中适配器,android:打造万能通用适配器

    本文原创,转载请注明出处. 1.前言 listview作为安卓项目中一个的明星控件,它的适配器的写法是广大安卓开发者需要掌握和优化的技巧. 本文旨在介绍一个通用的适配器BaseCommAdapter写 ...

  5. Android:打造万能通用适配器

    原文地址:http://blog.csdn.net/q649381130/article/details/51781921 1.前言 listview作为安卓项目中一个的明星控件,它的适配器的写法是广 ...

  6. windows终止进程 /万能恢复大师、WRSvn、WRtlname删除

    windows终止进程 /万能恢复大师.WRSvn.WRtlname删除 1 svn删除历程 1.1 右键删除 1.2 任务管理器结束进程 1.3 cmd 打开命令提示窗口 1.3.1 PID(Pro ...

  7. RecyclerView 万能适配器

    一.框架引入 先在项目的 build.gradle(Project:XXXX) 的 repositories 添加: allprojects {repositories {...maven { url ...

  8. List列表的万能的适配器

    ListView的万能适配器: https://github.com/JoanZapata/base-adapter-helper 首先介绍QuickAdapter.VH的实现: static cla ...

  9. Android RecyclerView万能分割线

    很久之前接触过RecyclerView,前段时间闲来无事用了下,结果发觉又被分割线伤了下.于是找了分代码,理解和完善,形成了适合我的一个个万能分割线工具类. 主要方法: /*** 看图说话:get I ...

最新文章

  1. springboot项目打包部署服务器
  2. MySQL / 多版本并发控制
  3. SHELL编程一二三
  4. 前端学习(2256)如何解决冲突
  5. 一起学习C语言:C语言循环结构(三)
  6. 推荐一款图片轮换jQuery插件
  7. Android解包命令:unpackbootimg与打包命令:mkbootimg使用
  8. [C#] 汉字转拼音,支持多音字
  9. tableau 官方手册 (中文版 pdf)
  10. oracle怎么下载安装,Oracle数据库下载与安装的完整步骤
  11. c++程序内嵌lua字节码
  12. unity游戏框架学习-场景管理
  13. 9106w android7,三星note4 SM-N9106W原厂刷机包4.4.4/5.0.1rom线刷包Root驱动
  14. 嵌入式系统应用开发实验(三): Verilog编程使VGA图像输出
  15. c语言求最小公约数和最小公倍数,c语言求最大公约数和最小公倍数
  16. Arduino + RFID 读取 IC 卡 Arduino uno中获得RFID的UID 并通过串口转发RFID卡号
  17. Shiro框架学习笔记、整合Springboot、redis缓存
  18. html鼠标事件没反应,电脑鼠标点击当前页面没反应怎么办
  19. 5.2 odex文件
  20. 【错误记录】Android 应用导入 ijkplayer 报错 ( uses-sdk:minSdkVersion 19 cannot be smaller than version 21 decl )

热门文章

  1. c++ set/map 判断插入是否成功
  2. 让UI设计师崩溃的瞬间,你经历过哪些?
  3. 4-CNN-demo-0602-SeNet_block.py
  4. python:返回列表和数组的最大最小值的索引
  5. 随机模拟滚动QQ中奖信息的代码
  6. 支付宝违章处理服务器维护中,支付宝处理交通违章多久能消掉?如何处理?
  7. Android入门第19天-Android里的RatingBar的使用
  8. IPv6地址及其报文----1
  9. 「津津乐道播客」#201. 用声音聚众,聊聊这个不寻常的春节
  10. SPRO里关于报工的配置