@Override public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder, int viewType) { if (holder instanceof ExpandableItemViewHolder) { ((ExpandableItemViewHolder) holder).setExpandStateFlags(STATE_FLAG_INITIAL_VALUE); } super.onViewRecycled(holder, viewType); }
private static void safeUpdateExpandStateFlags(RecyclerView.ViewHolder holder, int flags) { if (!(holder instanceof ExpandableItemViewHolder)) { return; } final ExpandableItemViewHolder holder2 = (ExpandableItemViewHolder) holder; final int curFlags = holder2.getExpandStateFlags(); final int mask = ~Constants.STATE_FLAG_IS_UPDATED; // append HAS_EXPANDED_STATE_CHANGED flag if ((curFlags != STATE_FLAG_INITIAL_VALUE) && (((curFlags ^ flags) & Constants.STATE_FLAG_IS_EXPANDED) != 0)) { flags |= Constants.STATE_FLAG_HAS_EXPANDED_STATE_CHANGED; } // append UPDATED flag if ((curFlags == STATE_FLAG_INITIAL_VALUE) || (((curFlags ^ flags) & mask) != 0)) { flags |= Constants.STATE_FLAG_IS_UPDATED; } holder2.setExpandStateFlags(flags); }
@NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { if (mExpandableItemAdapter == null) { throw new IllegalStateException(); } final int maskedViewType = (viewType & (~VIEW_TYPE_FLAG_IS_GROUP)); final RecyclerView.ViewHolder holder; if ((viewType & VIEW_TYPE_FLAG_IS_GROUP) != 0) { holder = mExpandableItemAdapter.onCreateGroupViewHolder(parent, maskedViewType); } else { holder = mExpandableItemAdapter.onCreateChildViewHolder(parent, maskedViewType); } if (holder instanceof ExpandableItemViewHolder) { ((ExpandableItemViewHolder) holder).setExpandStateFlags(STATE_FLAG_INITIAL_VALUE); } return holder; }