/** * Create an instance of {@link ListBaseViewHolder} for the given viewType (not for the given * index). This method will look up for the first component that fits the viewType requirement and * doesn't be used. Then create the certain type of view, detach the view f[rom the component. * * @param parent the ViewGroup into which the new view will be inserted * @param viewType the type of the new view * @return the created view holder. */ @Override public ListBaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (mChildren != null) { if (mViewTypes == null) return createVHForFakeComponent(viewType); ArrayList<WXComponent> mTypes = mViewTypes.get(viewType); checkRecycledViewPool(viewType); if (mTypes == null) return createVHForFakeComponent(viewType); for (int i = 0; i < mTypes.size(); i++) { WXComponent component = mTypes.get(i); if (component == null || component.isUsing()) { continue; } if (component.getDomObject() != null && component.getDomObject().isFixed()) { return createVHForFakeComponent(viewType); } else { if (component instanceof WXCell) { if (component.getRealView() != null) { return new ListBaseViewHolder(component, viewType); } else { component.lazy(false); component.createView(this, -1); component.applyLayoutAndEvent(component); return new ListBaseViewHolder(component, viewType); } } else { WXLogUtils.e( TAG, "List cannot include element except cell、header、fixed、refresh and loading"); return createVHForFakeComponent(viewType); } } } } if (WXEnvironment.isApkDebugable()) { WXLogUtils.e(TAG, "Cannot find request viewType: " + viewType); } return createVHForFakeComponent(viewType); }