使用Databinding为Recyclerview使用同一个ViewHolder加载不同Item

提示:在阅读本篇文章前,你最好对android databinding有一定了解,本文使用的代码均为kotlin,但是不用担心,都很简单

最近在写项目的时候使用了databinding技术,突发奇想,databinding是不是也能应用于recyclerview中,让加载多个不同的item更简单呢。在网上搜索过后读到了这篇文章,发现作者巧妙的使用了原有的函数来实现,在结合了自身使用实践之后,就有了现在这篇博客。

提问环节

为了让阅读过程更有目的性,先提几个问题,让大家带着问题来阅读

adaper部分

Q1:onCreateViewHolder中怎么动态的创建不同类型的ViewHold[……]

Read more

Android测试体系-在MVVM架构中如何测试Model层与ViewModel层

背景

此文章是对于google code lab中《Introduction to Test Double and Dependence injection》 与 《Testing Basics》的总结,本篇主要讲述如何在mvvm架构的android项目中对Model层以及ViewModel层进行测试

Model层

为什么要测它

model层作为数据获取层,主要与network和数据库打交道,我们需要测试其对数据的获取和更新操作逻辑的正确性

测它的时候会遇到什么问题

如上所述,Model层通常和数据库和网络有较强相关性,我们需要测试的只是其对数据的处理逻辑。

如何解决

改变数[……]

Read more

项目的升级-给RemoveButterKnife插件增加新功能

前言

经过项目的初步编写和进一步改造,RemoveButterKnife插件终于也有模有样了,但是,功能上仅仅支持Activity/Fragment的BindView注解。

关于编写和优化的过程可以看下面两篇文章
项目构造RemoveButterKnife
项目改进-重构RemoveButterKnife
当然,这里也附上这个项目的github地址

为了让插件支持更加彻底,我们还要支持组合自定义view以及viewholder中使用butterknife的情况,当然,我们也要支持OnClick注解以及一些其他的使用场景。

要增加哪些功能?

首先要确定需要增加哪些功能点,功能点的更新如[……]

Read more

项目的改造——RemoveButterKnife插件代码的重构

前言

这篇文章记述了我的插件RemoveButterKnife的代码改进过程以及思路,关于插件,各位可以看RemoveButterKnife代码库,关于文章,可以看RemoveButterKnife从构思到实现

原因

近期想给原来的插件RemoveButterKnife加入一些新的功能,发现以前的代码没有使用任何的设计模式,全部功能都写在一起,对于新功能的添加来说十分糟糕。趁此机会重构了一下代码,在此记录过程。

具体步骤

插件主要分为三个部分
1. 主插件入口部分
2. 代码寻找/处理部分
3. 代码生成部分

1. 主插件入口部分

我们首先看第一部分,主入口部分,这部分内容主要代[……]

Read more

Android开发中的MVP模式概念以及网络请求实现顺序

MVP模式

三层

1.view
2.presenter
3.model

View

1.view职责,继承view接口,实现方法,持有presenter,this传入presenter

Presenter

2.presenter职责,实现databridge接口,接收view实现,处理逻辑,完成后使用view回调,与model交互,this传入model实例

Model

3.model职责,接收databridge实现,做网络请求,调用databridge实例做回调

结构如上图

1`7.view层创建presenter实例,并实现view接口
2.presenter层接收[……]

Read more

React Native Windows平台配置+接入typescript总结

配置

1.根据https://facebook.github.io/react-native/docs/getting-started.html的配置来进行初步设置
2.设置完毕后如果出现各种网络请求错误/拉取错误,使用android studio打开android目录,进行一次拉取
3.完毕之后再运行react-native run-android会遇到500错误,这是由于reactnative的版本错误造成的,按照下面步骤执行命令

接入typescript

1.在项目目录下运行命令行
2.执行以下指令

[crayo[……]

Read more

AndroidStudio报错dl.google.com:443 访问失败解决方案

这个问题分两种情况:

1.网络问题

这是由于访问网络不通畅引起的,需要设置代理解决,这也是最常见的一种,无需赘述

2.gradle中文路径问题

这种情况虽然也报错访问失败,但其实不是网络问题,打开setting,找到gradle选项卡,查看里面的路径是否包含中文,全部改成英文,即可解决,如下图。

[……]

Read more

Android架构–测试选择

需要用到的测试工具库

1.espresso google官方提供的一个ui测试库
2.mockito 一个可以模拟各种类并进行注入/返回的库
3.junit 测试常用库

View的测试

使用espresso测试,espresso是一个谷歌官方推出的测试库,可以模拟进行各种ui操作,并判断组件状态。
例子

关于espresso的使用详见官方手册,这里只做引出,如果要做进一步测试,可以用mock来模拟一个ViewModel并inject来进行测试。

ViewModel

ViewModel部分与repositor[……]

Read more

Android架构体系–样例解析

接上一篇文章的概念分析的内容,这篇文章主要给出一个实际的mvvm例子来分析。

上一篇文章在这里Android架构体系–结构和组件选择

样例目的

通过mvvm模式和room(google提供的持久化库)来进行user类的显示/添加功能

结构

view:MainActivity(显示user),AddNewUserActivity(添加user)
viewmodel:UserViewModel(负责与model层通信,持有repository实例,并提供获取/插入user的操作)
model:user(实例类),userdao,appdatabase(初始化数据库实例类),userrep[……]

Read more