工作中遇到的坑(四)
哈哈哈,没想到已经连载到第四集了
接口设计
这样设计接口把单个任意类型的数值往外部传,而不需要设计额外的接口
public interface Callback<T> {
void run(T param);
}
private Callback<CaptionDrawItem> onCaptionClick; //点击后
public void setOnCaptionClick(Callback<CaptionDrawItem> captionClick) {
this.onCaptionClick = captionClick;
}
if (onCaptionClick != null) {
onCaptionClick.run(currentTouchData.hitItem);
}
坑点:
如果用layoutParam.leftMargin的方式去移动View,然后马上通过getX去获取相对坐标,是会出现获取不到的情况的,一般是0,因为绘制需要一定的时间
宿主和插件两边都能声明权限, 但是插件里面的权限必须是宿主的子集
List<Object>,Object implement Parcelable 如果Object内部的成员变量没有implement Parcelable,会默认设置为null,而不是Crash
循环删除:
Iterator it = list.iterator();
while(it.hasNext()){
String x = it.next();
if(x.equals("del")){
it.remove();
}
}
使用这方法可以在一个集合遍历的同时也能删除集合的元素
优化:
多个View联动设置setLayoutParam,只需要设置一次,其他就直接改参数就行了,防止多次重复绘制
使用GradientDrawable(也就是shape标签的动态创建方案)时,需要设定drawable的初始大小,否则将无法展示出来。
冷门知识
ArrayList还实现了RandomAccess这个接口,是一个标记接口
在Collections.binarySearch
int binarySearch(List<? extends Comparable<? super T>> list, T key) {
if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD)
return Collections.indexedBinarySearch(list, key);
else
return Collections.iteratorBinarySearch(list, key);
}
可以知道,如果List 集成了RandowAccess接口,或者数量少于5000,会使用For循环,其他时候使用iterator
List<> 没有实现Serializable接口,但是ArrayList实现了