@NonNull @Override public final ViewHolderWrapper<VH> onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) { VH viewHolder = wrappedAdapter.createViewHolder(parent, viewType); Context context = parent.getContext(); FrameLayout frameLayout = new FrameLayout(context); frameLayout.setForeground(ThemeUtil.getDrawable(context, R.attr.selectableItemBackground)); frameLayout.addView(viewHolder.itemView); frameLayout.setLayoutParams( new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT)); return new ViewHolderWrapper<>(frameLayout, viewHolder); }
private float getBottomViewCount() { if (mBottomItemsHeight != -1.f) return mBottomItemsHeight; int itemCount = mRecyclerView.getAdapter().getItemCount(); int totalHeight = 0; int maxHeight = mRecyclerView.getHeight(); int i; for (i = itemCount - 1; i >= 0; i--) { int viewType = mRecyclerView.getAdapter().getItemViewType(i); RecyclerView.ViewHolder holder = mRecyclerView.getRecycledViewPool().getRecycledView(viewType); if (holder == null) holder = mRecyclerView.getAdapter().createViewHolder(mRecyclerView, viewType); mRecyclerView.getAdapter().bindViewHolder(holder, i); holder.itemView.requestLayout(); mRecyclerView.getLayoutManager().measureChild(holder.itemView, 0, 0); totalHeight += mRecyclerView.getLayoutManager().getDecoratedMeasuredHeight(holder.itemView); mRecyclerView.getRecycledViewPool().putRecycledView(holder); if (totalHeight >= maxHeight) return itemCount - 1 - i - (float) (totalHeight - maxHeight) / holder.itemView.getMeasuredHeight(); } mBottomItemsHeight = itemCount; return itemCount; }