工作中遇到的坑(四)
哈哈哈,沒想到已經連載到第四集了
介面設計
這樣設計介面把單個任意型別的數值往外部傳,而不需要設計額外的介面
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實現了