@NonNull @Override protected RecyclerView.ViewHolder onCreateViewHolderImpl( HeaderFooterHelper hfHelper, ViewGroup parent, int viewType) { if (hfHelper == null || hfHelper.isLayoutIdInRecord(viewType)) { LayoutIdHolder holder = findLayoutIdHolder(viewType); return new ViewHolder( parent, holder.mMainLayoutId, holder.mMenuLayoutId, getTrackingEdge(), mSwipeListener); } else { return new ViewHolder(hfHelper.findView(viewType, getAdapterManager().getItemSize())); } }
@Override protected int getItemViewTypeImpl(HeaderFooterHelper hfHelper, int position) { final T t = getItem(position); int layoutId = getItemLayoutId(position, t); int menuLayoutId = getItemMenuLayoutId(position, layoutId, t); int viewType; final LayoutIdHolder holder = new LayoutIdHolder(layoutId, menuLayoutId); // same layoutId && same menuLayoutId ? indicate -> same viewType Integer val = mViewTypeMap.get(holder); if (val == null) { viewType = --mMinValueType; holder.mViewType = viewType; mViewTypeMap.put(holder, viewType); if (hfHelper != null) hfHelper.recordLayoutId(viewType); } else { viewType = val; } return viewType; }