工作中遇到的坑(四)

作者: 云呆呆 | 来源:发表于2019-03-18 20:14 被阅读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实现了

    相关文章

      网友评论

        本文标题:工作中遇到的坑(四)

        本文链接:https://www.haomeiwen.com/subject/sgtimqtx.html