public int getMaxScrollX() { Adapter adapter = getAdapter(); LayoutManager layoutManager = getLayoutManager(); if (adapter == null || layoutManager == null || getChildCount() == 0 || adapter.getItemCount() == 0) return 0; View view = getChildAt(getChildCount() - 1); int position = getChildAdapterPosition(view); if (position == adapter.getItemCount()) return Math.max(0, view.getRight() - getWidth()); return Integer.MAX_VALUE; }
@NonNull public ComposedChildAdapterTag addAdapter(@NonNull RecyclerView.Adapter adapter, int position) { final ComposedChildAdapterTag tag = new ComposedChildAdapterTag(); mAdapterTags.add(position, tag); mAdapters.add(position, adapter); ComposedChildAdapterDataObserver observer; final int uniqueAdapterIndex = mUniqueAdapters.indexOf(adapter); if (uniqueAdapterIndex >= 0) { observer = mObservers.get(uniqueAdapterIndex); } else { observer = new ComposedChildAdapterDataObserver(mSubscriber, adapter); mObservers.add(observer); mUniqueAdapters.add(adapter); adapter.registerAdapterDataObserver(observer); } observer.registerChildAdapterTag(tag); return tag; }
@Nullable public RecyclerView.Adapter removeAdapter(@NonNull ComposedChildAdapterTag tag) { final int segment = getAdapterSegment(tag); if (segment < 0) { return null; } final RecyclerView.Adapter adapter = mAdapters.remove(segment); mAdapterTags.remove(segment); final int uniqueAdapterIndex = mUniqueAdapters.indexOf(adapter); if (uniqueAdapterIndex < 0) { throw new IllegalStateException("Something wrong. Inconsistency detected."); } final ComposedChildAdapterDataObserver observer = mObservers.get(uniqueAdapterIndex); observer.unregisterChildAdapterTag(tag); if (!observer.hasChildAdapters()) { adapter.unregisterAdapterDataObserver(observer); } return adapter; }
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; }
private void addViewAt(int index) { addViewAt(adapter.getItemViewType(index), index); }
@Override public int getSpanSize(int position) { switch (recyclerView.getAdapter().getItemViewType(position)) { case DynamicRecyclerViewAdapter.TYPE_EMPTY_VIEW: case DynamicRecyclerViewAdapter.TYPE_SECTION_HEADER: return ((GridLayoutManager) recyclerView.getLayoutManager()).getSpanCount(); case DynamicRecyclerViewAdapter.TYPE_ITEM: return 1; default: return -1; } } });
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == REQUEST_TAKE_PHOTO) { ImageUtils.rescaleBitmap(this, controller.getCurrentPhotoPath()); feedback.getPicturePaths().add(controller.getCurrentPhotoPath()); thumbnailsAdapter.notifyDataSetChanged(); } else if (requestCode == REQUEST_GALLERY) { String filePath = ImageUtils.rescaleBitmap(this, data.getData()); feedback.getPicturePaths().add(filePath); thumbnailsAdapter.notifyDataSetChanged(); } } }
public void removeHeaderView() { headerView = null; getWrappedAdapter().notifyDataSetChanged(); }
public void setHeaderView(View view) { headerView = view; getWrappedAdapter().notifyDataSetChanged(); }
@Override public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { viewTypeAdapters.get(holder.getItemViewType()).onViewRecycled(holder); }
public void setFooterView(View view) { footerView = view; getWrappedAdapter().notifyDataSetChanged(); }
@Override public void onViewRecycled(RecyclerView.ViewHolder holder) { wrapped.onViewRecycled(holder); }
@Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); }
@Override public final long getItemId(final int position) { return wrappedAdapter.getItemId(position); }
@Override public long getItemId(int position) { return position == adapter.getItemCount() ? NO_ID : adapter.getItemId(position); }
public void moveItem(long itemId, int toColumn, int toRow, boolean scrollToItem) { for (int i = 0; i < mLists.size(); i++) { RecyclerView.Adapter adapter = mLists.get(i).getAdapter(); final int count = adapter.getItemCount(); for (int j = 0; j < count; j++) { long id = adapter.getItemId(j); if (id == itemId) { moveItem(i, j, toColumn, toRow, scrollToItem); return; } } } }
@Override public int getItemViewType(int position) { return wrapped.getItemViewType(position); }
public void removeFooterView() { footerView = null; getWrappedAdapter().notifyDataSetChanged(); }
@Override public long getItemId(int position) { return super.getItemId(position); }
@Override public void onDetachedFromRecyclerView(@NonNull final RecyclerView recyclerView) { mRecycleView = null; super.onDetachedFromRecyclerView(recyclerView); }