Android开发Android技术知识Android开发

工作中遇到的坑(四)

2019-03-18  本文已影响2人  云呆呆

哈哈哈,没想到已经连载到第四集了

接口设计

这样设计接口把单个任意类型的数值往外部传,而不需要设计额外的接口

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实现了

上一篇下一篇

猜你喜欢

热点阅读