@Override public boolean apply(@NonNull IAdapter<Item> lastParentAdapter, int lastParentPosition, Item item, int position) { if (item.isSelected()) { items.add(item); } return false; } }, false);
private static void updateSelectedItemsWithCollapsed(Set<IItem> selected, List<IItem> items) { int length = items.size(); for (int i = 0; i < length; i++) { if (items.get(i).isSelected()) { selected.add(items.get(i)); } if (items.get(i) instanceof IExpandable && ((IExpandable) items.get(i)).getSubItems() != null) { updateSelectedItemsWithCollapsed(selected, ((IExpandable) items.get(i)).getSubItems()); } } }
/** * 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(); } }
private void undoChange() { if (mHistory != null) { if (mHistory.action == ACTION_REMOVE) { for (int i = 0, size = mHistory.items.size(); i < size; i++) { FastAdapter.RelativeInfo<Item> relativeInfo = mHistory.items.get(i); if (relativeInfo.adapter instanceof IItemAdapter) { IItemAdapter<?, Item> adapter = (IItemAdapter<?, Item>) relativeInfo.adapter; adapter.addInternal(relativeInfo.position, asList(relativeInfo.item)); if (relativeInfo.item.isSelected()) { mAdapter.select(relativeInfo.position); } } } } } mHistory = null; }
@Override public boolean apply(@NonNull IAdapter<Item> lastParentAdapter, int lastParentPosition, Item item, int position) { if (item.isSelected()) { //if it's a subitem remove it from the parent if (item instanceof ISubItem) { //a sub item which is not in the list can be instantly deleted IExpandable parent = (IExpandable) ((ISubItem) item).getParent(); //parent should not be null, but check in any case.. if (parent != null) { parent.getSubItems().remove(item); } } if (position != -1) { //a normal displayed item can only be deleted afterwards positions.add(position); } } return false; } }, false);
/** * @return a set with the global positions of all selected items (which are currently in the list (includes expanded expandable items)) */ public Set<Integer> getSelections() { Set<Integer> selections = new ArraySet<>(); for (int i = 0, size = mFastAdapter.getItemCount(); i < size; i++) { if (mFastAdapter.getItem(i).isSelected()) { selections.add(i); } } return selections; }
/** * toggles the selection of the item at the given position * * @param position the global position */ public void toggleSelection(int position) { if (mFastAdapter.getItem(position).isSelected()) { deselect(position); } else { select(position); } }
if (ri.item != null && ri.item.isSelected()) { //double verify if (ri.adapter != null && ri.adapter instanceof IItemAdapter) { ((IItemAdapter) ri.adapter).remove(positions.get(i));
/** * helper method to get all selections from the ItemAdapter's original item list * * @return a Set with the global positions of all selected Items */ public Set<Integer> getSelections() { if (mOriginalItems != null) { Set<Integer> selections = new HashSet<>(); int adapterOffset = mItemAdapter.getFastAdapter().getPreItemCountByOrder(mItemAdapter.getOrder()); for (int i = 0, size = mOriginalItems.size(); i < size; i++) { Item item = mOriginalItems.get(i); if (item.isSelected()) { selections.add(i + adapterOffset); } } return selections; } else { return mItemAdapter.getFastAdapter().getSelections(); } }
/** * internal method to find all selections from subItems and sub sub items so we can save those inside our savedInstanceState * * @param item the parent item * @param selections the ArrayList which will be stored in the savedInstanceState */ public static <Item extends IItem> void findSubItemSelections(Item item, List<String> selections) { if (item instanceof IExpandable && !((IExpandable) item).isExpanded() && ((IExpandable) item).getSubItems() != null) { List<Item> subItems = (List<Item>) ((IExpandable<Item, ?>) item).getSubItems(); for (int i = 0, size = subItems.size(); i < size; i++) { Item subItem = subItems.get(i); String id = String.valueOf(subItem.getIdentifier()); if (subItem.isSelected()) { selections.add(id); } findSubItemSelections(subItem, selections); } } }
/** * implements the basic behavior of a CAB and multi select behavior, * including logics if the clicked item is collapsible * * @param act the current Activity * @param item the current item * @return null if nothing was done, or a boolean to inform if the event was consumed */ public Boolean onClick(AppCompatActivity act, IItem item) { //if we are current in CAB mode, and we remove the last selection, we want to finish the actionMode if (mActionMode != null && (mSelectExtension.getSelectedItems().size() == 1) && item.isSelected()) { mActionMode.finish(); mSelectExtension.deselect(); return true; } if (mActionMode != null) { // calculate the selection count for the action mode // because current selection is not reflecting the future state yet! int selected = mSelectExtension.getSelectedItems().size(); if (item.isSelected()) selected--; else if (item.isSelectable()) selected++; checkActionMode(act, selected); } return null; }
if (item.isSelected() && !mAllowDeselection) { return; boolean selected = item.isSelected();