/** * Append footer to the rear of the mFooterLayout. * * @param footer */ public void addFooterView(View footer) { addFooterView(footer, -1, LinearLayout.VERTICAL); }
/** * Append header to the rear of the mHeaderLayout. * * @param header */ public void addHeaderView(View header) { addHeaderView(header, -1); }
/** * Refresh complete */ public void loadMoreComplete() { if (getLoadMoreViewCount() == 0) { return; } mLoading = false; mLoadMoreView.setLoadMoreStatus(LoadMoreView.STATUS_DEFAULT); notifyItemChanged(getHeaderLayoutCount() + mData.size() + getFooterLayoutCount()); }
protected K createBaseViewHolder(ViewGroup parent, int layoutResId) { return createBaseViewHolder(getItemView(layoutResId, parent)); }
public int expandAll(int position, boolean animate, boolean notify) { position -= getHeaderLayoutCount(); T endItem = null; if (position + 1 < this.mData.size()) { endItem = getItem(position + 1); } IExpandable expandable = getExpandableItem(position); if (!hasSubItems(expandable)) { return 0; } int count = expand(position + getHeaderLayoutCount(), false, false); for (int i = position + 1; i < this.mData.size(); i++) { T item = getItem(i); if (item == endItem) { break; } if (isExpandable(item)) { count += expand(i + getHeaderLayoutCount(), false, false); } } if (notify) { if (animate) { notifyItemRangeInserted(position + getHeaderLayoutCount() + 1, count); } else { notifyDataSetChanged(); } } return count; }
position -= getHeaderLayoutCount(); IExpandable expandable = getExpandableItem(position); if (expandable == null) { return 0; if (!hasSubItems(expandable)) { expandable.setExpanded(false); return 0; List list = expandable.getSubItems(); mData.addAll(position + 1, list); subItemCount += recursiveExpand(position + 1, list); int parentPos = position + getHeaderLayoutCount(); if (shouldNotify) { if (animate) { notifyItemChanged(parentPos); notifyItemRangeInserted(parentPos + 1, subItemCount); } else { notifyDataSetChanged();
/** * Collapse an expandable item that has been expanded.. * * @param position the position of the item, which includes the header layout count. * @param animate collapse with animation or not. * @param notify notify the recyclerView refresh UI or not. * @return the number of subItems collapsed. */ public int collapse(@IntRange(from = 0) int position, boolean animate, boolean notify) { position -= getHeaderLayoutCount(); IExpandable expandable = getExpandableItem(position); if (expandable == null) { return 0; } int subItemCount = recursiveCollapse(position); expandable.setExpanded(false); int parentPos = position + getHeaderLayoutCount(); if (notify) { if (animate) { notifyItemChanged(parentPos); notifyItemRangeRemoved(parentPos + 1, subItemCount); } else { notifyDataSetChanged(); } } return subItemCount; }
@Override public int getItemViewType(int position) { if (getEmptyViewCount() == 1) { boolean header = mHeadAndEmptyEnable && getHeaderLayoutCount() != 0; switch (position) { case 0: autoLoadMore(position); int numHeaders = getHeaderLayoutCount(); if (position < numHeaders) { return HEADER_VIEW; return TRANS_2_VIEW; return getDefItemViewType(adjPosition); } else { adjPosition = adjPosition - adapterCount; int numFooters = getFooterLayoutCount(); if (adjPosition < numFooters) { return FOOTER_VIEW;
@Override public K onCreateViewHolder(ViewGroup parent, int viewType) { K baseViewHolder = null; this.mContext = parent.getContext(); this.mLayoutInflater = LayoutInflater.from(mContext); switch (viewType) { case LOADING_VIEW: baseViewHolder = getLoadingView(parent); break; case HEADER_VIEW: baseViewHolder = createBaseViewHolder(mHeaderLayout); break; case EMPTY_VIEW: baseViewHolder = createBaseViewHolder(mEmptyLayout); break; case FOOTER_VIEW: baseViewHolder = createBaseViewHolder(mFooterLayout); break; case TRANS_0_VIEW: case TRANS_1_VIEW: case TRANS_2_VIEW: baseViewHolder = onCreateTransViewHolder(parent, mTransLayoutType); break; default: baseViewHolder = onCreateDefViewHolder(parent, viewType); } return baseViewHolder; }
@Override public void onClick(View v) { if (mLoadMoreView.getLoadMoreStatus() == LoadMoreView.STATUS_FAIL) { mLoadMoreView.setLoadMoreStatus(LoadMoreView.STATUS_DEFAULT); notifyItemChanged(getHeaderLayoutCount() + mData.size() + getFooterLayoutCount()); } } });
/** * @param position */ public void setItemChecked(int position) { if (mLastCheckedPosition == position) return; mBooleanArray.put(position, true); if (mLastCheckedPosition > -1) { mBooleanArray.put(mLastCheckedPosition, false); mAdapter.notifyItemChanged(mLastCheckedPosition); } mAdapter.notifyDataSetChanged(); mLastCheckedPosition = position; }
@Override public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) { switch (position) { default: case 0: mAdapter.isFirstOnly(true); break; case 1: mAdapter.isFirstOnly(false); break; } tvIsFirstOnly.setText(stringItems[position]); mAdapter.notifyDataSetChanged(); dialog.dismiss(); } });
@Override public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) { switch (position) { default: case 0: mAdapter.setLoadMoreType(LoadMoreType.APAY); break; case 1: mAdapter.setLoadMoreType(LoadMoreType.BALL_BEAT); break; case 2: mAdapter.setLoadMoreType(LoadMoreType.BALL_CLIP_ROTATE); break; case 3: mAdapter.setLoadMoreType(LoadMoreType.BALL_SCALE); break; } btnLoadType.setText(stringItems[position]); mAdapter.notifyDataSetChanged(); dialog.dismiss(); } });
default: case 0: mAdapter.openLoadAnimation(BaseQuickAdapter.CUSTOMIN); break; case 1: mAdapter.openLoadAnimation(BaseQuickAdapter.ALPHAIN); break; case 2: mAdapter.openLoadAnimation(BaseQuickAdapter.SCALEIN); break; case 3: mAdapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_BOTTOM); break; case 4: mAdapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_LEFT); break; case 5: mAdapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_RIGHT); break; case 6: mAdapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_LEFT_RIGHT); break; case 7: mAdapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_BOTTOM_TOP); break; mAdapter.notifyDataSetChanged(); dialog.dismiss();
/** * setting up a new instance to data; * * @param data */ public void setNewData(List<T> data) { this.mData = data == null ? new ArrayList<T>() : data; if (mRequestLoadMoreListener != null) { mNextLoadEnable = true; mLoadMoreEnable = true; mLoading = false; mLoadMoreView.setLoadMoreStatus(LoadMoreView.STATUS_DEFAULT); } mLastPosition = -1; notifyDataSetChanged(); }
/** * Called when a view created by this adapter has been attached to a window. * simple to solve item will layout using all * {@link #setFullSpan(RecyclerView.ViewHolder)} * * @param holder */ @Override public void onViewAttachedToWindow(K holder) { super.onViewAttachedToWindow(holder); int type = holder.getItemViewType(); if (type == EMPTY_VIEW || type == HEADER_VIEW || type == FOOTER_VIEW || type == LOADING_VIEW) { setFullSpan(holder); } else { addAnimation(holder); } }
convert(holder, mData.get(holder.getLayoutPosition() - getHeaderLayoutCount())); break; case LOADING_VIEW: case TRANS_2_VIEW: default: convert(holder, mData.get(holder.getLayoutPosition() - getHeaderLayoutCount())); break;
/** * Expand an expandable item with animation. * * @param position position of the item, which includes the header layout count. * @return the number of items that have been added. */ public int expand(@IntRange(from = 0) int position) { return expand(position, true, true); }
/** * Collapse an expandable item that has been expanded.. * * @param position the position of the item, which includes the header layout count. * @return the number of subItems collapsed. */ public int collapse(@IntRange(from = 0) int position) { return collapse(position, true, true); }
protected K onCreateTransViewHolder(ViewGroup parent, int layoutType) { if (layoutType == TRANS_0_VIEW) { return createBaseViewHolder(parent, mLayoutResIds[0]); } else if (layoutType == TRANS_1_VIEW) { return createBaseViewHolder(parent, mLayoutResIds[1]); } else { return createBaseViewHolder(parent, mLayoutResIds[2]); } }