list的實現使用的是RecyclerView,但getItemViewType返回的是dom的ref,ref在一個dom樹裏應該是唯一的;
public int getItemViewType(int position) {
return generateViewType(getChild(position));
}
private int generateViewType(WXComponent component) {
long id;
try {
id = Integer.parseInt(component.getDomObject().getRef());
String type = component.getDomObject().getAttrs().getScope();
if (!TextUtils.isEmpty(type)) {
if (mRefToViewType == null) {
mRefToViewType = new ArrayMap<>();
}
if (!mRefToViewType.containsKey(type)) {
mRefToViewType.put(type, id);
}
id = mRefToViewType.get(type);
}
} catch (RuntimeException e) {
WXLogUtils.eTag(TAG, e);
id = RecyclerView.NO_ID;
WXLogUtils.e(TAG, "getItemViewType: NO ID, this will crash the whole render system of WXListRecyclerView");
}
return (int) id;
}
阿神2017-04-18 10:55:21
進行重用要是同一個type的view才行.
按照描述, 每個item的type都是唯一的,也就是彼此都不是同一個東西,代碼無法分辨具體能不能重用.
這裡應該有個混淆,把其他地方需要的唯一標識(id)和RecyclerView需要的type混在一起了.如果希望兩個Item的View可以共用,這兩個View的type就應該是一樣的(它們的id可能不一樣)