Home
malinkang
Cancel

MultiType和AdapterDelegates源码分析

MultiType和AdapterDelegates两个库都是对RecyclerView的Adapter进行封装的库,可以快速实现多种布局类型的RecyclerView。两个库的核心思想都是封装一个实体我们暂时命名为ItemViewBinder,用来提供布局资源和绑定数据。对于多种类型的Adapter存在多个ItemViewBinder对象,如AItemViewBinder、BItemVie...

签署Android应用

Android 要求所有 APK 必须先使用证书进行数字签署,然后才能安装。 从命令行构建和签署您的应用 1.使用keytool生成一个私钥 使用以下命令可以创建一个有效期为10000天的密钥: keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 10000 -alias test -...

Kotlin 高阶函数和lambda表达式

高阶函数 高阶函数是将函数用作参数或返回值的函数。 这种函数的一个很好的例子是 lock(),它接受一个锁对象和一个函数,获取锁,运行函数并释放锁: fun <T> lock(lock: Lock, body: () -> T): T { lock.lock() try { return body() } finally ...

生成绑定类

数据绑定库生成用于访问布局的变量和视图的绑定类。生成的绑定类将布局变量与布局中的视图链接起来。绑定类的名称和包可以自定义。所有生成的绑定类都继承自ViewDataBinding类。 为每个布局文件生成绑定类。默认情况下,类的名称基于布局文件的名称,将其转换为Pascal大小写并向其添加Binding后缀。布局文件名是activity_main.xml,因此相应的生成类是Activity...

绑定适配器使用

绑定适配器负责对设置值进行适当的框架调用。一个例子是设置一个属性值,如调用setText()方法。另一个例子是设置一个事件监听器,如调用setOnClickListener()方法。 数据绑定库允许您指定调用的方法来设置值,提供自己的绑定逻辑,并使用适配器指定返回对象的类型。 设置属性值 每当绑定值发生更改时,生成的绑定类必须使用绑定表达式在视图上调用setter方法。您可以允许数据...

DataBinding绑定表达式使用

表达式语言允许您编写处理View分发的事件的表达式。数据绑定库自动生成将布局中的View与数据对象绑定所需的类。 数据绑定布局文件略有不同,以layout根标签开头,后跟data元素和view根元素。此view元素是您的根在非绑定布局文件中的位置。以下代码显示了一个示例布局文件: <?xml version="1.0" encoding="utf-8"?> <lay...

Leakcanary源码分析

ARouter源码分析

ARouter原理如下 编译期,会扫描@Route注解,将注解里的信息封装成一个RouteMeta对象。并生成一个辅助类ARouter$$Group$$groupName,groupName即分组的名字,这也意味着同一个group只会生成一个辅助类。该类继承自IRouteGroup,有一个loadInto()方法。在运行时,调用loadInto()方法,将@Route中的path作为k...

ButterKnife源码分析

本文分析的源码为8.4.0。 项目结构 butterknife包含ButterKnife核心的Api,如ButterKnife。butterknife-annotations包含了所有定义的注解。butterknife-compiler包含了生成模板代码的代码。这里我们重点研究ButterKnife是如何生成模板代码以及在我们的类中是如何调用的。 核心类 ViewBinding是...

RxJava源码分析

RxJava创建过程 create() 调用create()创建Observable。 Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(@NonNull ObservableEmitter<Integer> emi...