ZAdapter3断头吸附效果

几种方案是选择

  • 外层一个显示的断头和内部的布局一样,但不是同一个 因为涉及到选择状态和 横向滚动 而导致的复杂性 放弃!

  • 自定义recyclerView布局,这样解决了是同一个的view的问题。但是因为getTop而导致 刷新监听的不兼容 放弃!

  • 既然想要用同一个View的话可以用李代桃僵的方式去实现,既用一个空view去代替RecyclerView的Itemview站位。然后吧itemView显示在断头上即可!

效果图

Rxjava2总结

Rxjava2基础认知

  • 形式正确的有限Observable
    调用观察者的onCompleted正好一次或者它的onError正好一次,而且此后不能再调用观察者的任何其它方法。如果onComplete 或者 onError 走任何一个 都会 主动解除订阅关系;

    • 如果解除订阅关系以后在发射 onError 则会 报错;而发射onComplete则不会。
    • 注意解除订阅关系 还是可以发射 onNext
  • Disposable类:

    • dispose():主动解除订阅
    • isDisposed():查询是否解除订阅 true 代表 已经解除订阅
  • CompositeDisposable类:可以快速解除所有添加的Disposable类
    每当我们得到一个Disposable时就调用CompositeDisposable.add()将它添加到容器中, 在退出的时候, 调用CompositeDisposable.clear() 即可快速解除.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CompositeDisposable compositeDisposable=new CompositeDisposable();
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onComplete();或者 emitter.onError(new Throwable("O__O "));
}
}).subscribe(new Observer<Integer>() {
private Disposable mDisposable;
@Override
public void onSubscribe(Disposable d) {
<!-- 订阅 -->
mDisposable = d;
<!-- 添加到容器中 -->
compositeDisposable.add(d);
}
@Override
public void onNext(Integer value) {
<!-- 判断mDisposable.isDisposed() 如果解除了则不需要处理 -->
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
<!-- 解除所有订阅者 -->
compositeDisposable.clear();

Recycler下Adapter的HeaderFooter多个添加方式

几种方案是选择

  • 外层一个显示的断头和内部的布局一样,但不是同一个 因为涉及到选择状态和 横向滚动 而导致的复杂性 放弃!

  • 自定义recyclerView布局,这样解决了是同一个的view的问题。但是因为getTop而导致 刷新监听的不兼容 放弃!

  • 既然想要用同一个View的话可以用李代桃僵的方式去实现,既用一个空view去代替RecyclerView的Itemview站位。然后吧itemView显示在断头上即可!

效果图

Java8函数式编程读书总结

Lambda表达式

  • Lambda表达式的类型:函数接口是只有一个抽象方法的接口
  • @FunctionalInterface:是否仅仅一个抽象方法!不然编译错误,主要为了lambda提供方便;

    有些多抽象方法的接口不必使用此注解!

  • interface
    • default(注意有方法体!):符合多态 子类如果覆盖,既用自己的行为;

      事件原因:Java8中Collection接口增加stream方法,意味所有子类都需要增加。

    • static default:未构造即可使用,一般用于构造 例如Stream.rang()方法构造流;

继承与链式调用的结合

父类:返回值是泛型;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Helper<T extends Helper> {
protected T child;
public Helper() {
child = (T) this;
}
public T setText(@IdRes int viewId,String textStr) {
...
checkChild();
return child;
}
protected void checkChild() {
if (child == null)
throw new IllegalStateException("child must be set in child's Constructor!" +
"not method:initDefaultValueAnimator");
}
}

ZAdapter3的分析与撸库

分析时候的思路

  • adapter里面的viewhold可以被复用

    所以需要重写一个方法通过位置获取layoutStyle,addviewHolder顺便传递一个layoutStyle,也可不传为默认值;

  • layoutID要在viewhold的类方法中,而不是构造器中

    因为resID与viewHold本就是一个整体。方法构造中的话表示resID是可变的,并且看到这个viewhold类的时候布局文件看不到 容易蒙蔽

  • helper类与ButterKnife的取舍?

    helper比ButterKnife好,原因:可定制封装逻辑,不强转,可连写,可通过泛型+继承+装饰模式达到扩展的目的;

  • adapter 可扩展+链式调用 是用 泛型+继承 还是 同一个接口呢?

    泛型+继承 :在IDEA中是可以的。但是AS中出现了bug。我已经向google提意见了,估计不会吊我~

    所以退而求其次 选择同一个接口

  • 基础功能

    addViewHold(ViewHolder)//为default
    addViewHold(style,viewHolder)
    addHeaderHold(ViewHolder/resId)
    addFooterHold(ViewHolder/resId)
    addEmptyHold(ViewHolder/resId)
    notify系列
    notifyEx系列(这里的位置对应为数据集的位置。包括header/footer)
    relaeList(rv) 故事的开始。很多逻辑可以在这里完成

原型模式-下拉刷新的全局设置

目的

全局替换刷新头部

头部可拔插:需要应用策略模式(组合与接口的方式set get);
全局替换:就是原型模式

设置一个全局头部,那么每次使用的下拉刷新 都是全局头部的深拷贝对象。当然可以随意生成想要拷贝的特性;

Android-drawText()详解

  • 全局声明
    • canvas.drawText(string, baseLineX, baseLineY, paint)
    • baseLineY=基线的Y;
    • baseLineX=基线的X;
    • 本篇以textSize=100为例

API:canvas.drawText(String text,int start,int end,float x,float y, paint); //截取字符串 然后绘制

深入理解Java虚拟机总结---类初始化过程

几种方案是选择

  • 外层一个显示的断头和内部的布局一样,但不是同一个 因为涉及到选择状态和 横向滚动 而导致的复杂性 放弃!

  • 自定义recyclerView布局,这样解决了是同一个的view的问题。但是因为getTop而导致 刷新监听的不兼容 放弃!

  • 既然想要用同一个View的话可以用李代桃僵的方式去实现,既用一个空view去代替RecyclerView的Itemview站位。然后吧itemView显示在断头上即可!

效果图

深入理解Java虚拟机总结

基础了解

  • Java 程序的执行过程:Java 源代码文件(.Java文件)-> Java Compiler(Java编译器)->Java 字节码文件(.class文件)->类加载器(Class Loader)->Runtime Data Area(运行时数据)-> Execution Engine(执行引擎)
  • 各种基本类型:boolean、byte、char、short、int、float、long、double;
  • 对象引用:reference类型 不等于对象本身,可能是对象的句柄也可能对象的引用指针
  • 局部变量默认没有初始值,不赋值是不可以使用的。和类变量(默认是有的)不一样;
  • 额外了解:插入式注解处理器:需要继承AbstractProcessor;

Mac下Hexo搭建博客攻略

Hexo是基于NodeJs的静态博客框架,简单、轻量,其生成的静态网页可以托管在GithubHeroku上。

  • 超快速度
  • 支持MarkDown
  • 一键部署
  • 丰富的插件

下面以我的博客为例,luhaoaimama1.github.io