@Override public void onNewItems(@NonNull List<Model> newItems, int page) { mModelAdapter.add(newItems); } }
/** * static method to retrieve a new `ItemAdapter` * * @return a new ItemAdapter */ public static <Model, Item extends IItem> ModelAdapter<Model, Item> models(IInterceptor<Model, Item> interceptor) { return new ModelAdapter<>(interceptor); }
public ModelAdapter<Model, Item> addInternal(int position, List<Item> items) { if (mUseIdDistributor) { getIdDistributor().checkIds(items); } if (items.size() > 0) { mItems.addAll(position, items, getFastAdapter().getPreItemCountByOrder(getOrder())); mapPossibleTypes(items); } return this; }
/** * returns the global position if the relative position within this adapter was given * * @param position the relative position * @return the global position */ public int getGlobalPosition(int position) { return position + getFastAdapter().getPreItemCountByOrder(getOrder()); }
/** * forces to remap all possible types for the RecyclerView */ public void remapMappedTypes() { getFastAdapter().clearTypeInstance(); mapPossibleTypes(mItems.getItems()); }
if (adapter.isUseIdDistributor()) { adapter.getIdDistributor().checkIds(items); collapseIfPossible(adapter.getFastAdapter()); if (adapter.getItemList() instanceof ComparableItemListImpl) { Collections.sort(items, ((ComparableItemListImpl) adapter.getItemList()).getComparator()); adapter.mapPossibleTypes(items); final List<Item> adapterItems = adapter.getAdapterItems(); final List<Item> oldItems = new ArrayList<>(adapterItems);
/** * add a list of items at the given position within the existing items * * @param position the global position * @param items the items to add */ public ModelAdapter<?, Item> add(int position, List<Item> items) { if (mOriginalItems != null && items.size() > 0) { if (mItemAdapter.isUseIdDistributor()) { mItemAdapter.getIdDistributor().checkIds(items); } mOriginalItems.addAll(getAdapterPosition(mItemAdapter.getAdapterItems().get(position)) - mItemAdapter.getFastAdapter().getPreItemCount(position), items); publishResults(mConstraint, performFiltering(mConstraint)); return mItemAdapter; } else { return mItemAdapter.addInternal(position, items); } }
/** * sets an item at the given position, overwriting the previous item * * @param position the global position * @param item the item to set */ public ModelAdapter<?, Item> set(int position, Item item) { if (mOriginalItems != null) { if (mItemAdapter.isUseIdDistributor()) { mItemAdapter.getIdDistributor().checkId(item); } mOriginalItems.set(getAdapterPosition(mItemAdapter.getAdapterItems().get(position)) - mItemAdapter.getFastAdapter().getPreItemCount(position), item); publishResults(mConstraint, performFiltering(mConstraint)); return mItemAdapter; } else { return mItemAdapter.setInternal(position, item); } }
ModelAdapter<IconModel, ModelIconItem> itemAdapter = new ModelAdapter<>(new IInterceptor<IconModel, ModelIconItem>() { @Override public ModelIconItem intercept(IconModel o) { itemAdapter.add(models);
/** * sets a complete new list of items onto this adapter, using the new list. Calls notifyDataSetChanged * * @param list the new items to set * @param retainFilter set to true if you want to keep the filter applied * @return this */ public ModelAdapter<Model, Item> setNewList(List<Model> list, boolean retainFilter) { List<Item> items = intercept(list); if (mUseIdDistributor) { getIdDistributor().checkIds(items); } //reset the filter CharSequence filter = null; if (getItemFilter().getConstraint() != null) { filter = getItemFilter().getConstraint(); getItemFilter().performFiltering(null); } mapPossibleTypes(items); boolean publishResults = filter != null && retainFilter; if (publishResults) { getItemFilter().publishResults(filter, getItemFilter().performFiltering(filter)); } mItems.setNewList(items, !publishResults); return this; }
/** * add a list of items to the end of the existing items * will prior check if we are currently filtering * * @param items the items to add */ public ModelAdapter<?, Item> add(List<Item> items) { if (mOriginalItems != null && items.size() > 0) { if (mItemAdapter.isUseIdDistributor()) { mItemAdapter.getIdDistributor().checkIds(items); } mOriginalItems.addAll(items); publishResults(mConstraint, performFiltering(mConstraint)); return mItemAdapter; } else { return mItemAdapter.addInternal(items); } }
/** * removes an item at the given position within the existing icons * * @param position the global position */ public ModelAdapter<?, Item> remove(int position) { if (mOriginalItems != null) { mOriginalItems.remove(getAdapterPosition(mItemAdapter.getAdapterItems().get(position)) - mItemAdapter.getFastAdapter().getPreItemCount(position)); publishResults(mConstraint, performFiltering(mConstraint)); return mItemAdapter; } else { return mItemAdapter.remove(position); } }
/** * moves an item within the list from a position to a position * * @param fromPosition the position global from which we want to move * @param toPosition the global position to which to move * @return this */ public ModelAdapter<?, Item> move(int fromPosition, int toPosition) { if (mOriginalItems != null) { int preItemCount = mItemAdapter.getFastAdapter().getPreItemCount(fromPosition); int adjustedFrom = getAdapterPosition(mItemAdapter.getAdapterItems().get(fromPosition)); int adjustedTo = getAdapterPosition(mItemAdapter.getAdapterItems().get(toPosition)); Item item = mOriginalItems.get(adjustedFrom - preItemCount); mOriginalItems.remove(adjustedFrom - preItemCount); mOriginalItems.add(adjustedTo - preItemCount, item); performFiltering(mConstraint); return mItemAdapter; } else { return mItemAdapter.move(fromPosition, toPosition); } }
int preItemCount = getFastAdapter().getPreItemCountByOrder(getOrder()); for (int i = 0; i < getAdapterItemCount(); i++) { int globalPosition = i + preItemCount; FastAdapter.RelativeInfo<Item> relativeInfo = getFastAdapter().getRelativeInfo(globalPosition); Item item = relativeInfo.item;
public ModelAdapter<Model, Item> setInternal(int position, Item item) { if (mUseIdDistributor) { getIdDistributor().checkId(item); } mItems.set(position, item, getFastAdapter().getPreItemCount(position)); mFastAdapter.registerTypeInstance(item); return this; }
for (IAdapterExtension<Item> ext : mItemAdapter.getFastAdapter().getExtensions()) { ext.performFiltering(constraint); mOriginalItems = new ArrayList<>(mItemAdapter.getAdapterItems()); filteredItems = mItemAdapter.getAdapterItems();
/** * helper method to get all selections from the ItemAdapter's original item list * * @return a Set with the selected items out of all items in this itemAdapter (not the listed ones) */ public Set<Item> getSelectedItems() { if (mOriginalItems != null) { Set<Item> selections = new HashSet<>(); for (int i = 0, size = mOriginalItems.size(); i < size; i++) { Item item = mOriginalItems.get(i); if (item.isSelected()) { selections.add(item); } } return selections; } else { return mItemAdapter.getFastAdapter().getSelectedItems(); } }
/** * removes a range of items starting with the given position within the existing icons * * @param position the global position * @param itemCount the count of items which were removed */ public ModelAdapter<?, Item> removeRange(int position, int itemCount) { if (mOriginalItems != null) { //global position to relative int length = mOriginalItems.size(); int preItemCount = mItemAdapter.getFastAdapter().getPreItemCount(position); //make sure we do not delete to many items int saveItemCount = Math.min(itemCount, length - position + preItemCount); for (int i = 0; i < saveItemCount; i++) { mOriginalItems.remove(position - preItemCount); } publishResults(mConstraint, performFiltering(mConstraint)); return mItemAdapter; } else { return mItemAdapter.removeRange(position, itemCount); } }
/** * set a new list of items and apply it to the existing list (clear - add) for this adapter * NOTE may consider using setNewList if the items list is a reference to the list which is used inside the adapter * * @param items the items to set */ public ModelAdapter<Model, Item> set(List<Model> items) { return set(items, true); }
@Override public void onChanged(int position, int count, Object payload) { adapter.getFastAdapter().notifyAdapterItemRangeChanged(adapter.getFastAdapter().getPreItemCountByOrder(adapter.getOrder()) + position, count, payload); } }