RecyclerView的复用
当有9个不同的Item显示在屏幕上,一定有超过9个的ViewHolder对象,通过onCreateViewHolder(ViewGroup parent, int type)被创建(也就是其引用的View对象被创建)。
根据官方文档阅读到的资料,大致整理了一下RecyclerView的3个方面:
创建Item
从.xml布局文件中inflate出新的View对象.
上述新建的View对象作为参数传入ViewHolder的构造函数来创建ViewHolder对象。
显示或更新数据
为每个ViewHolder对象分配一个position,并调用onBindViewHolder(ViewHolder
2018-07-12
Android
ViewGroup拦截子View点击事件失败
流程图整理自Android 触摸事件机制(四) ViewGroup中触摸事件详解 | skywang
事情起因:要用RelativeLayout去拦截里面的子View的点击事件,因此直接为
relativeLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});打算通过返回true来将后续的点击事件消费掉,但是失败了。
在看了源码分析之后,找
2018-07-12
View
android自定义View中用NinePatch类画9图
9图的制作在官网和其他博客中都有大量教程,最终可以制作出XXX.9.png文件
## 没有用NinePatch:在自定义View中,直用Bitmap和画笔而不配合NinePatch类是画不9图的效果的,比如:
//R.drawable.image9Patch是制作好的9图
Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.image9Patch)@Override
protected void onDraw(Canvas canvas) {
...创建RectF dst,作为bitmap被画出且自动缩
2018-07-03
View
Dagger2配合Application拓展类实现单例模式
需要提前了解Dagger2的@Singleton 和 @Component依赖。
介绍Android中的单例模式,可以通过继承Application类,在onCreate中初始化单例类,然后将单例类的引用通过getXXX()发布出去。Application类提供了天然的单例模式。
但是,如果我们有10个单例类,那么就需要
在Application类里面写10个引用,
10个getXXX()方法
onCreate()中10个单例类的初始化
缺点
当需求变动,要更换实现类的时候,要在Application里面做修改
onCreate()中初始化的10个单例类,并不是马上就要用的,更好的
2018-07-02
第三方库
git,为服务器仓库建立新的分支。
直接在github页面上面
当前切换到了master分支,如果文本框输入后一个新的分支名字后,确认,就会创建一个分支指向master分支。要创建一个分支指向develop分支,就将当前分支切换到develop上面。
这一切都用鼠标可以完成,很直观简洁。
通过git bash。如果我要在服务器创建一个新的分支bugfix指向develop,这做不到。只能通过push命令,让这一次push跟踪到develop,在develop分支上面生成新的快照,并将新的bugfix指向新的版本快照。
在本地的develop分支chekout -b一个bugfix分支,然后执行git branch -u
2018-07-01
git
git跟踪远程分支,查看本地分支追踪和远程分支的关系
跟踪远程分支如果用git push指令时,当前分支没有跟踪远程分支(没有和远程分支建立联系),那么就会git就会报错
There is no tracking information for the current branch.
Please specify which branch you want to merge with.因为当前分支没有追踪远程指定的分支的话,当前分支指定的版本快照不知道要作为服务器哪一个分支的版本快照的子节点。简单来说就是:不知道要推送给哪一个分支。那么如何建立远程分支:
克隆时自动将创建好的master分支追踪origin/master分支git clone
2018-07-01
git
git多人协作模拟,图解
说明,为了制图方便,因此将版本快照用普通的数字来表示,实际上不严谨,应该像官网用SHA-1 值如92ec2来表示版本快照更加合适。
现在有两个人协作开发一个项目,master分支是稳定版,随时可发布,develop分支是开发版,是平时开发用的分支。
由Peter和Tony负责开发这个项目,两个人各自完成开发,测试后,push到服务器就可以下班。
此时在github或者gitlab上的.git表示的代码仓库版本情况如图
现在Peter和Tony两人各自打开git bash输入
git clone 服务器地址git clone指令做了4个事情:
git自动将整个代码仓库包括.git文件夹下
2018-07-01
git
Dagger2
例子来自https://www.jianshu.com/p/24af4c102f62
只用@Inject和@Component完成依赖注入:
在gradle添加依赖,用@Inject和@Component为相应的字段和类打上注解
build project
Dagger2会在app.build.generated.source.apt.debug.com.text.包名生成代码。
DaggerXXXComponent.java
XXX_MembersInjector.java
XXX_Factory.java
举一个例子:MainAcitvity对象依赖Pot对象,Pot对象依赖Ro
2018-06-30
第三方库
git-clone做了什么
git官方教程:3.5 Git 分支 - 远程分支
打开一个directory,输入
git init
git clone <远程地址>发生了如下图所示的事情上方是服务器的仓库,master指向f4265,当克隆仓库之后,整个仓库的所有文件,包括.git文件,全部下载到本地的diretory。
git的clone命令将远程仓库在本地命名为origin,创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master(如第二个图的origin/master指针),同时创建一个master指针,并将HEAD指针指向这个master指针(如第二个图的mas
2018-06-29
git