/** * @param position the relative position * @return the item inside this adapter */ @Override public Item getAdapterItem(int position) { return mItems.get(position); }
/** * Searches for the given identifier and calculates its relative position * * @param identifier the identifier of an item which is searched for * @return the relative position */ @Override public int getAdapterPosition(long identifier) { return mItems.getAdapterPosition(identifier); }
/** * the ModelAdapter does not keep a list of input model's to get retrieve them a `reverseInterceptor` is required * usually it is used to get the `Model` from a `IModelItem` * * @return a List of initial Model's */ public List<Model> getModels() { ArrayList<Model> list = new ArrayList<>(mItems.size()); for (Item item : mItems.getItems()) { if (mReverseInterceptor != null) { list.add(mReverseInterceptor.intercept(item)); } else if (item instanceof IModelItem) { list.add((Model) ((IModelItem) item).getModel()); } else { throw new RuntimeException("to get the list of models, the item either needs to implement `IModelItem` or you have to provide a `reverseInterceptor`"); } } return list; }
/** * @return the items within this adapter */ @Override public List<Item> getAdapterItems() { return mItems.getItems(); }
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; }
public ModelAdapter<Model, Item> addInternal(List<Item> items) { if (mUseIdDistributor) { getIdDistributor().checkIds(items); } FastAdapter<Item> fastAdapter = getFastAdapter(); if (fastAdapter != null) { mItems.addAll(items, fastAdapter.getPreItemCountByOrder(getOrder())); } else { mItems.addAll(items, 0); } mapPossibleTypes(items); return this; }
/** * 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<Model, Item> move(int fromPosition, int toPosition) { mItems.move(fromPosition, toPosition, getFastAdapter().getPreItemCount(fromPosition)); return this; }
/** * removes an item at the given position within the existing icons * * @param position the global position */ public ModelAdapter<Model, Item> remove(int position) { mItems.remove(position, getFastAdapter().getPreItemCount(position)); return this; }
/** * 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<Model, Item> removeRange(int position, int itemCount) { mItems.removeRange(position, itemCount, getFastAdapter().getPreItemCount(position)); return this; }
/** * removes all items of this adapter */ public ModelAdapter<Model, Item> clear() { mItems.clear(getFastAdapter().getPreItemCountByOrder(getOrder())); return this; }
/** * 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; }
/** * forces to remap all possible types for the RecyclerView */ public void remapMappedTypes() { getFastAdapter().clearTypeInstance(); mapPossibleTypes(mItems.getItems()); }
/** * set a new list of model 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 * @param resetFilter `true` if the filter should get reset * @param adapterNotifier a `IAdapterNotifier` allowing to modify the notify logic for the adapter (keep null for default) * @return this */ public ModelAdapter<Model, Item> setInternal(List<Item> items, boolean resetFilter, @Nullable IAdapterNotifier adapterNotifier) { if (mUseIdDistributor) { getIdDistributor().checkIds(items); } //reset the filter if (resetFilter && getItemFilter().getConstraint() != null) { getItemFilter().performFiltering(null); } for (IAdapterExtension<Item> ext : getFastAdapter().getExtensions()) { ext.set(items, resetFilter); } //map the types mapPossibleTypes(items); //forward set int itemsBeforeThisAdapter = getFastAdapter().getPreItemCountByOrder(getOrder()); mItems.set(items, itemsBeforeThisAdapter, adapterNotifier); return this; }
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; }