/** * Collapse a group. * * @param groupPosition The group position to be collapsed * @return True if the group was collapsed, false otherwise (If the group was already collapsed, this will return false) */ public boolean collapseGroup(int groupPosition) { return collapseGroup(groupPosition, null); }
/** * Expand a group. * * @param groupPosition The group position to be expanded * @return True if the group was expanded, false otherwise (If the group was already expanded, this will return false) */ public boolean expandGroup(int groupPosition) { return expandGroup(groupPosition, null); }
/** * Scroll to a group. * * @param groupPosition Position of the group item * @param childItemHeight Height of each child item height */ public void scrollToGroup(int groupPosition, int childItemHeight) { scrollToGroup(groupPosition, childItemHeight, 0, 0, null); }
/** * Scroll to a group. * * @param groupPosition Position of the group item * @param childItemHeight Height of each child item height * @param topMargin Top margin * @param bottomMargin Bottom margin */ public void scrollToGroup(int groupPosition, int childItemHeight, int topMargin, int bottomMargin) { int totalChildrenHeight = getChildCount(groupPosition) * childItemHeight; scrollToGroupWithTotalChildrenHeight(groupPosition, totalChildrenHeight, topMargin, bottomMargin, null); }
long expandablePosition = mExpandableItemManager.getExpandablePosition(flatPosition); int groupPosition = RecyclerViewExpandableItemManager .getPackedPositionGroup(expandablePosition); case R.id.layout_group_item: if (mExpandableItemManager.isGroupExpanded(groupPosition)) { mExpandableItemManager.collapseGroup(groupPosition); } else { mExpandableItemManager.expandGroup(groupPosition);
private void trackHeader() { .getExpandablePosition(linearLayoutManager.findFirstVisibleItemPosition()); .getPackedPositionChild(firstExpandablePosition); int fGroupPos = RecyclerViewExpandableItemManager .getPackedPositionGroup(firstExpandablePosition); boolean fGroupExpanded = mRVExpandableItemManager.isGroupExpanded(fGroupPos); .getExpandablePosition(linearLayoutManager.findLastVisibleItemPosition()); .getPackedPositionGroup(lastExpandablePosition); .getExpandablePosition(linearLayoutManager.findLastVisibleItemPosition()); int lGroupPos = RecyclerViewExpandableItemManager .getPackedPositionGroup(lastExpandablePosition); show = (lGroupPos == fGroupPos);
long packedPosition = RecyclerViewExpandableItemManager.getPackedPositionForGroup(groupPosition); int flatPosition = getFlatPosition(packedPosition); if (!isGroupExpanded(groupPosition)) { totalChildrenHeight = 0;
mRecyclerViewExpandableItemManager = new RecyclerViewExpandableItemManager(eimSavedState); mRecyclerViewExpandableItemManager.setOnGroupExpandListener(this); mRecyclerViewExpandableItemManager.setOnGroupCollapseListener(this); mRecyclerViewExpandableItemManager.attachRecyclerView(recyclerView);
private void rebuildPositionTranslator() { if (mPositionTranslator != null) { long[] savedState = mPositionTranslator.getSavedStateArray(); mPositionTranslator.build( mExpandableItemAdapter, ExpandablePositionTranslator.BUILD_OPTION_DEFAULT, mExpandableListManager.getDefaultGroupsExpandedState()); // NOTE: do not call hook routines and listener methods mPositionTranslator.restoreExpandedGroupItems(savedState, null, null, null); } }
@Override public void showList(List<PermissionGroup> value) { if (isFinishing()) { return; } progressBar.setVisibility(View.GONE); coordinatorLayout.setVisibility(View.VISIBLE); recyclerView.setVisibility(View.VISIBLE); myItemAdapter.setData(value); mWrappedAdapter = mRecyclerViewExpandableItemManager.createWrappedAdapter(myItemAdapter); recyclerView.setAdapter(mWrappedAdapter); invalidateOptionsMenu(); }
/** * Scroll to a group. * * @param groupPosition Position of the group item * @param childItemHeight Height of each child item height * @param topMargin Top margin * @param bottomMargin Bottom margin * @param path Adapter path for the wrapped adapter returned by the {@link #createWrappedAdapter(RecyclerView.Adapter)}. */ public void scrollToGroup(int groupPosition, int childItemHeight, int topMargin, int bottomMargin, AdapterPath path) { int totalChildrenHeight = getChildCount(groupPosition) * childItemHeight; scrollToGroupWithTotalChildrenHeight(groupPosition, totalChildrenHeight, topMargin, bottomMargin, path); }
public ExpandableRecyclerViewWrapperAdapter(RecyclerViewExpandableItemManager manager, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter, long[] expandedItemsSavedState) { super(adapter); mExpandableItemAdapter = getExpandableItemAdapter(adapter); if (mExpandableItemAdapter == null) { throw new IllegalArgumentException("adapter does not implement ExpandableItemAdapter"); } if (manager == null) { throw new IllegalArgumentException("manager cannot be null"); } mExpandableListManager = manager; mPositionTranslator = new ExpandablePositionTranslator(); mPositionTranslator.build( mExpandableItemAdapter, ExpandablePositionTranslator.BUILD_OPTION_DEFAULT, mExpandableListManager.getDefaultGroupsExpandedState()); if (expandedItemsSavedState != null) { // NOTE: do not call hook routines and listener methods mPositionTranslator.restoreExpandedGroupItems(expandedItemsSavedState, null, null, null); } }
private void adjustScrollPositionOnGroupExpanded(int groupPosition) { int pad = (int) (getResources().getDisplayMetrics().density * 10); int childItemHeight = getResources().getDimensionPixelSize(android.R.dimen.app_icon_size) + pad * 2; int topMargin = (int) (getResources().getDisplayMetrics().density * 16); mRecyclerViewExpandableItemManager .scrollToGroup(groupPosition, childItemHeight, topMargin, topMargin); recyclerView.smoothScrollBy(0,-100); }
/*package*/ void expandAll() { if (!mPositionTranslator.isEmpty() && !mPositionTranslator.isAllExpanded()) { mPositionTranslator.build( mExpandableItemAdapter, ExpandablePositionTranslator.BUILD_OPTION_EXPANDED_ALL, mExpandableListManager.getDefaultGroupsExpandedState()); notifyDataSetChanged(); } }
/*package*/ void collapseAll() { if (!mPositionTranslator.isEmpty() && !mPositionTranslator.isAllCollapsed()) { mPositionTranslator.build( mExpandableItemAdapter, ExpandablePositionTranslator.BUILD_OPTION_COLLAPSED_ALL, mExpandableListManager.getDefaultGroupsExpandedState()); notifyDataSetChanged(); } }