简介

RecyclerView 可以用来替代ListView和GridView

应用流程

1.导入相关依赖
进入project structure

添加依赖


2.设计UI界面和item样式
activity_main.xml

<?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"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerview"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>

item_demo.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/textview"android:layout_width="match_parent"android:layout_height="match_parent"android:text="测试"android:textSize="26sp"/></LinearLayout>

3.创建一个IOperationData 接口用来创建对数据进行操作的方法,如数据交换,数据删除

package com.example;public interface IOperationData {/*** 数据交换* @param fromPosion* @param toPosition*/void onItemMove(int fromPosion,int toPosition);/*** 数据删除* @param position*/void onItemDissmiss(int position);
}

4.自定义适配器,继承RecyclerView.Adapter,并实现IOperationData接口,创建一个内部类用来绑定item样式

package com.example.adapter;import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import com.example.IOperationData;
import com.example.R;import java.util.Collections;
import java.util.List;public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> implements IOperationData {private Context context;private List<String> list;private View inflater;public MyAdapter(Context context, List<String> list) {this.context = context;this.list = list;}@NonNull@Overridepublic MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//创建viewHolder,返回每一项布局//inflater = LayoutInflater.from(context).inflate(R.layout.item_demo,parent,false);inflater = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_demo, parent,false);MyViewHolder myViewHolder = new MyViewHolder(inflater);return myViewHolder;}@Overridepublic void onBindViewHolder(@NonNull MyViewHolder holder, int position) {//将数据和控件绑定holder.textView.setText(list.get(position));}@Overridepublic int getItemCount() {return list.size();}@Overridepublic void onItemMove(int fromPosion, int toPosition) {//交换位置Collections.swap(list,fromPosion,toPosition);notifyItemMoved(fromPosion,toPosition);}@Overridepublic void onItemDissmiss(int position) {//移除数据list.remove(position);notifyItemRemoved(position);}class MyViewHolder extends RecyclerView.ViewHolder{TextView textView;public MyViewHolder(@NonNull View itemView) {super(itemView);textView = itemView.findViewById(R.id.textview);}}
}

5.自定义一个类继承ItemTouchHelper.Callback,用来实现拖拽和删除

package com.example;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;import com.example.adapter.MyAdapter;public class MyCallback extends ItemTouchHelper.Callback {MyAdapter myAdapter ;public MyCallback(MyAdapter myAdapter) {this.myAdapter = myAdapter;}@Overridepublic int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {int dragFlag = 0;if (recyclerView.getLayoutManager() instanceof GridLayoutManager){dragFlag = ItemTouchHelper.UP|ItemTouchHelper.DOWN|ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT;}else {dragFlag = ItemTouchHelper.UP|ItemTouchHelper.DOWN;}//只允许从右向左滑(针对listview的删除)int swipeFlag = ItemTouchHelper.LEFT;return makeMovementFlags(dragFlag,swipeFlag);}@Overridepublic boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {myAdapter.onItemMove(viewHolder.getAdapterPosition(),target.getAdapterPosition());return true;}@Overridepublic void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {myAdapter.onItemDissmiss(viewHolder.getAdapterPosition());}
}

6.在MainActivity中实现recyclerview的使用

package com.example;import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.content.Context;
import android.os.Bundle;import com.example.adapter.MyAdapter;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private RecyclerView recyclerView;private MyAdapter myAdapter;private Context mContext;private List<String> list;private ItemTouchHelper itemTouchHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mContext = this;setContentView(R.layout.activity_main);recyclerView = findViewById(R.id.recyclerview);list = new ArrayList<>();for (int i = 0; i < 10; i++) {list.add("a");}myAdapter = new MyAdapter(mContext,list);MyCallback myCallback = new MyCallback(myAdapter);itemTouchHelper = new ItemTouchHelper(myCallback);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
//        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//        GridLayoutManager gridLayoutManager = new GridLayoutManager(mContext,4);
//        gridLayoutManager.setOrientation(GridLayoutManager.VERTICAL);recyclerView.setLayoutManager(linearLayoutManager);recyclerView.setAdapter(myAdapter);itemTouchHelper.attachToRecyclerView(recyclerView);}
}

Android App开发学习第十四天:RecyclerView的简单使用相关推荐

  1. Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理

    Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...

  2. 简单Android app开发_与时代同行,目前最简单的手机APP开发方式!

    在市场需求的推动下,越来越多的公司开始制作APP,进一步拓展销售渠道.那么,市面上那么多可以开发APP的公司,要怎么选择呢? 第一,传统外包定制公司 这种方式在以前是绝对的最佳选择,制作出的APP非常 ...

  3. Java开发学习(三十四)----Maven私服(二)本地仓库访问私服配置与私服资源上传下载

    一.本地仓库访问私服配置 我们通过IDEA将开发的模块上传到私服,中间是要经过本地Maven的 本地Maven需要知道私服的访问地址以及私服访问的用户名和密码 私服中的仓库很多,Maven最终要把资源 ...

  4. Xamarin.Android开发实践(十四)

    原文:Xamarin.Android开发实践(十四) Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xama ...

  5. 一眼就看懂;Android App 开发前景介绍及学习路线规划

    Android App 开发的发展趋势和前景 安卓 App 开发是大趋势 从目前的各大社交终端以及移动媒体中手机占了百分之75.5的比例,随着各种移动端的系统升级,手机 App 也在现今这个社会面临着 ...

  6. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第二章:Android App 开发基础

    第 2 章 Android App开发基础 本章介绍基于Android系统的App开发常识,包括以下几个方面:App开发与其他软件开发有什么不一 样,App工程是怎样的组织结构又是怎样配置的,App开 ...

  7. Android开发问题集锦十四--绚丽的烟花

    Android开发问题集锦十四--绚丽的烟花 程序之美 前言 源码下载 程序之美 前言 随着一声突如其来的响声,打破了久违的不能喘息般的的寂静.一团彩色的光芒快速上升着,留下一线灰色的烟雾.啪!一朵& ...

  8. SAP UI5 应用开发教程之五十四 - 如何将本地 SAP UI5 应用配置到本地 Fiori Launchpad 中的试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  9. 写给Android App开发人员看的Android底层知识合集(1-8)

    写给Android App开发人员看的Android底层知识合集(1-8) 转自包老师:http://www.cnblogs.com/Jax/p/6864103.html 写给Android App开 ...

最新文章

  1. 描述一下 Intent 和 IntentFilter?
  2. 8月22-23日 首届IT管理技术大会
  3. 微信账号,欢迎一起探讨信息、知识、学习和管理!
  4. Java中的DeskTop类
  5. Linux系统编程之Vim使用小技巧---代码自动对齐,智能提示
  6. 一款标注颜色,距离的小软件 markman
  7. mysql数据库,创建只读用户
  8. python系列(三)python列表详解
  9. c++语言socket udp聊天程序,使用C/C++实现Socket聊天程序
  10. sncr脱硝技术流程图_SNCR烟气脱硝技术工艺流程示意图
  11. 一张图学会python应用到excel-简单使用python做excel多文件批量搜索(带图形界面)(已更新)...
  12. cdq分治 陌上花开(内无题解)
  13. 牛顿迭代法解非线性方程组
  14. 【Java企业级开发二】jsp简答题汇总
  15. Bean被IoC容器销毁后还能使用吗?
  16. 想在原有的基础上,再次添加一些阿里图标的进坑
  17. [4G5G专题-38]:物理层- LTE/NR下行公共控制信道PDCCH与其承载的内容下行控制信息格式DCI
  18. fortran中call的用法_手写源码系列(一)——call、apply、bind
  19. COSCon‘20 Track F 区块链论坛介绍
  20. 目标跟踪评估绘图(1):Windows10环境将pycharm跑出来的OTB100数据集的.txt结果文件,转换成.mat文件

热门文章

  1. can总线配置读入是什么意思_CAN总线含义
  2. 利用python处理Excel表格中的销售数据
  3. 良心的vscode主题推荐
  4. python3中使用requests库出现的编码问题
  5. PHP web表单生成器(函数部分)的理解
  6. stata对混合OLS进行LM检验
  7. 使用JQuery Ajax发送FormData数据
  8. 安卓开发-基础知识补习12
  9. 163 VIP个人邮箱怎么注册,163vip企业邮箱申请流程!
  10. 该如何选择手机群控系统,小白必看,防进深坑。