- 博客(15)
- 收藏
- 关注
原创 用RecyclerView实现类似支付宝应用图标拖拽排序以及增删管理的功能
1. 效果图2. 基本的功能在非编辑状态下可以直接点击图标进行跳转在编辑状态可以拖拽、添加、删除操作已被添加过的不能再次添加3. 实现的思路用两个RecyclerView实现,同时维护两个数据源,上部是常用应用,最多可以放8个;下部是全部应用。1. 每个应用图标的状态用枚举Option表示// 当前的操作状态enum class Option { ADD, REMOVE, NONE}2. 在处于编辑状态时创建ItemTouchHelper对象并attch到Recyc
2021-03-16 15:07:40 782
原创 安卓笔记:RecyclerView的四级缓存
1. Scrap (mChangedScrap、mAttachedScrap)保存屏幕内的holder,涉及到item动画时被notifyItemRangeChanged移除的holder保存在mChangedScrap中被其他notify(除notifyDataSetChanged)移除的holder保存在mAttachedScrap中2. Cache (mCachedViews)保存刚被移出屏幕的holder, 默认容量2 (可理解为上下各一个)3. Extension (mViewCa
2021-02-22 11:22:19 464
原创 安卓视图绑定ViewBinding与RecyclerView Adapter的简单封装
1. ViewBinding简介ViewBinding库会为每个xxx_layout.xml文件生成一个XxxLayoutBinding.java文件(除非了声明了tools:viewBindingIgnore=“true”),此类文件包含了xml中所有声明了android:id的控件,与DataBinding不同的是,它对原有文件侵入性最小,而DataBinding需要用...
2021-02-20 15:45:19 2653 3
原创 安卓依赖注入(DI)框架Hilt-Dagger入门
0. Why?为什么需要依赖注入?答:解耦。解谁和谁的耦?解对象创建与对象使用的耦。如何理解?此处引出两个概念:IoC容器、DI依赖注入,我们将对象的创建过程、销毁过程交给IoC容器(称为控制反转),在需要使用对象时由容器提供(称为注入),从而减少复杂系统的代码耦合,提高编程效率。如果大家接触过Spring Boot,就能很轻松的理解,Spring的核心就是IoC容器,及其对Bean(对象)生命周期的管理。Hilt和Dagger的关系?Hilt是对Dagg
2021-02-18 15:06:26 409
原创 浅谈安卓协程Android coroutine,及其与Retrofit的简单结合与使用
0. 前言早期的安卓编程。资源的调度与释放从来都是一个不可避免的问题,开发者在onCreate()中调度资源,例如进行网络请求,进行磁盘IO操作,然后在onPause()或者onDestory()中手动释放或打断资源的使用。LifeCycle的引入。为了实现更简便的生命周期监听,谷歌推出了LifeCycle Support Library支持库(后被迁移到AndroidX中成为Jetpack的一部分),旨在让开发者能够更好地在资源调度时实现自动的生命周期感知协程的引入。安卓中的协程依赖于Kotlin
2021-02-18 12:28:15 448 1
原创 利用Spring AOP切面和RabbitMQ消息队列实现高效的接口日志调用统计功能
总体的思想是:在需要日志统计的接口上加上自定义的注解(@OpLog),通过切面的方式获得接口调用时的参数信息,调用方信息等,同时为了不影响业务,采用MQ消息队列的方式执行日志入库的操作0. 定义实体类@Table(name = "op_log")@Entity@Data@EqualsAndHashCode(callSuper = false)public class OpLogEntity extends BaseEntity { /** * 接口名称 */ .
2021-02-08 16:11:49 1950 4
原创 利用Spring AOP+Hibernate Validator+Spring boot validation实现自动参数检验,一个注解解决
0. 问题引入在接口开发中,我们时常要对前端传递过来的参数进行检验,例如‘不能为空’、‘不能为Null’、‘类型只能是1、2、3中的一种’、‘长度需在6-10之间’等等,如果有参数不满足则直接返回,并将相应报错信息告知前端。对此,我们一般都是这么写: if (StringUtils.isBlank(businInfo.getOrganizeId())) { logger.error("更新手机唯一号接口:必要参数organizeId为空");
2021-01-28 18:15:41 367
原创 Spring Boot 中@Valid @Validated Validation的使用,简化参数判空、参数格式的校验
Controller层@RestController@RequestMapping("/car")public class CarController { @PostMapping("/list") public ResultBean<CarVO> list(@Valid @RequestBody QueryCarRequest request, BindingResult bindingResult) { if (bindingResult.hasErr
2021-01-21 17:10:22 1163 2
原创 安卓Gradle脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
文件名:build.gradle (:app)android { ... // 打包完成复制一份到apk文件夹内 this.project.afterEvaluate { project -> project.tasks.each { task -> if (task.toString().contains("assemble")) { task.doLast { and
2020-12-25 17:28:02 1094
原创 二进制状态管理, 如何用一个int值保存多种状态
定义状态private static final int STATUS_1 = 0x00000001;private static final int STATUS_2 = 0x00000002;private static final int STATUS_3 = 0x00000004;//当前状态组合public int state = 0x0000110;或者private static final int STATUS_1 = 1 << 0;private static
2020-12-25 17:11:44 654
原创 安卓RecyclerView DiffUtil工具的简单使用
val oldList = ... // 老列表val newList = ... // 新列表val adapter:RecyclerView.Adapter = ...// 1.定义比对方法val callback = object : DiffUtil.Callback() { override fun getOldListSize(): Int = oldList.size override fun getNewListSize(): Int = newList.size
2020-12-25 17:05:29 296
原创 Android Result API-用来替代安卓startActivityForResult()的新API,以函数回调的形式处理intent结果
在onCreate()中初始化ActivityResultLauncher<>变量 // 定义一个申请系统权限的意图 var resultLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { Log.i(mTAG, "onViewCreated: ${it}, ") }其中ActivityResultCon.
2020-12-18 10:00:04 1113
原创 RxAndroid学习
基于RxJava的编程思想,以链式调用灵活切换代码运行时所在的线程disposable = Observable.create((ObservableOnSubscribe<String>) emitter -> { Log.i(TAG, "currentThread1: " + Thread.currentThread().toString()); emitter.onNext("AS"); emitter.onNext("A1"); emitter.o
2020-12-18 09:50:00 131
原创 安卓-自动定时切换APP图标,节假日APP icon图标自动变化
首先在AndroidManifest中预定义好, 设置好icon,enabble设为false不启用,并指向原有的SplashActivity<activity android:name=".SplashActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.
2020-12-18 09:46:06 2262 1
原创 jooq入门-与springboot的集成以及简单使用
jooq入门-与springboot的集成以及简单使用maven引入spring-boot-starter-jooq, 以及jooq-codegen-maven插件 ... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jooq</artifactId> &
2020-12-14 16:08:34 484
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人