expandable-recycler-view
expandable-recycler-view copied to clipboard
How to implement endless loadmore to Expandable Recycler?
Please help me to implement endless loadmore to Expandable Recycler. Thanksss
I done!
MyActivity `
@Override
public void onLoadMore() {
mShoppingList.add(new ShoppingObj("load_more", "0", new ArrayList<ShoppingContentObj>
()));
mShoppingListRecyclerAdapter.notifyParentInserted(mShoppingList.size() - 1);
mReservationRcv.postDelayed(new Runnable() {
@Override
public void run() {
mShoppingList.remove(mShoppingList.size() - 1);
mShoppingListRecyclerAdapter.notifyParentRemoved(mShoppingList.size());
List<ShoppingObj> newData = new ArrayList<>();
newData.add(new ShoppingObj("Load More1", "12.04.2017", shoppingContentObjList));
newData.add(new ShoppingObj("Load More2", "12.04.2017", shoppingContentObjList));
newData.add(new ShoppingObj("Load More3", "12.04.2017", shoppingContentObjList));
mShoppingListRecyclerAdapter.addMoreData(newData);
mShoppingListRecyclerAdapter.setLoaded();
}
}, 2000);
}
`
MyAdapter
`
public class ShoppingListRecyclerAdapter extends ExpandableRecyclerAdapter<ShoppingObj,
ShoppingContentObj , ParentViewHolder, ChildViewHolder> {
public static final String TAG = ShoppingListRecyclerAdapter.class.getSimpleName();
private final int PARENT_VIEW_ITEM = 0;
private final int LOADING = 2;
private Context mContext;
private List<ShoppingObj> mShoppingList = new ArrayList<>();
private OnRecyclerObjectClick listener;
private OnLoadMoreRecyclerListener onLoadMoreListener;
private int lastVisibleItem, totalItemCount;
private boolean isLoading = false;
public interface OnLoadMoreRecyclerListener {
void onLoadMore();}
public ShoppingListRecyclerAdapter(Context context, RecyclerView recyclerView,
List<ShoppingObj> data, OnRecyclerObjectClick listener, OnLoadMoreRecyclerListener l) {
super(data);
this.mShoppingList = data;
this.mContext = context;
this.listener = listener;
this.onLoadMoreListener = l;
final LinearLayoutManagerWithSmoothScroller linearLayoutManager =
(LinearLayoutManagerWithSmoothScroller) recyclerView.getLayoutManager();
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
totalItemCount = linearLayoutManager.getItemCount();
lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition() + 1;
if (lastVisibleItem == mShoppingList.size() && dy == 0) {
return;
}
if (!isLoading && totalItemCount <= lastVisibleItem) {
if (onLoadMoreListener != null) {
onLoadMoreListener.onLoadMore();
}
isLoading = true;
}
}
});
}
@Override
public boolean isParentViewType(int viewType) {
return viewType == LOADING || viewType == PARENT_VIEW_ITEM;
}
@Override
public int getParentViewType(int parentPosition) {
return mShoppingList.get(parentPosition).getmName().equals("load_more") ? LOADING : PARENT_VIEW_ITEM;
}
@UiThread
@NonNull
@Override
public ParentViewHolder onCreateParentViewHolder(@NonNull ViewGroup parentViewGroup, int viewType) {
ParentViewHolder vh;
if (viewType == PARENT_VIEW_ITEM) {
View v = LayoutInflater.from(parentViewGroup.getContext()).inflate(
R.layout.item_shopping_list_parent, parentViewGroup, false);
vh = new ShoppingListParentViewHolder(v);
} else {
View v = LayoutInflater.from(parentViewGroup.getContext()).inflate(
R.layout.layout_progress_load_more, parentViewGroup, false);
vh = new ProgressParentViewHolder(v);
}
return vh;
}
@UiThread
@NonNull
@Override
public ChildViewHolder onCreateChildViewHolder(@NonNull ViewGroup childViewGroup, int viewType) {
View view = LayoutInflater.from(childViewGroup.getContext()).inflate(R.layout.item_shopping_list_child, childViewGroup, false);
return new ShoppingListChildViewHolder(view);
}
@Override
public void onBindParentViewHolder(@NonNull ParentViewHolder parentViewHolder, int parentPosition
, @NonNull ShoppingObj shoppingObj) {
if (parentViewHolder instanceof ShoppingListParentViewHolder) {
((ShoppingListParentViewHolder) parentViewHolder).bindData(shoppingObj);
((ShoppingListParentViewHolder) parentViewHolder).mCheckBoxDelete.setChecked(shoppingObj.isChecked());
} else {
((ProgressParentViewHolder) parentViewHolder).progressBar.setIndeterminate(true);
}
}
@UiThread
@Override
public void onBindChildViewHolder(@NonNull ChildViewHolder childViewHolder
, int parentPosition, int childPosition, @NonNull ShoppingContentObj shoppingContentObj) {
((ShoppingListChildViewHolder) childViewHolder).bindData(shoppingContentObj, childPosition);
}
class ProgressParentViewHolder extends ParentViewHolder {
private ProgressBar progressBar;
private ProgressParentViewHolder(View v) {
super(v);
progressBar = (ProgressBar) v.findViewById(R.id.progress_bar);
progressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_ATOP);
progressBar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setExpanded(false);
setExpandCollapseListener(null);
}
});
}
}
class ShoppingListParentViewHolder extends ParentViewHolder {
@BindView(R.id.textview_date)
TextView mTextViewDate;
@BindView(R.id.textview_name)
TextView mTextViewName;
@BindView(R.id.button_detail_edit)
Button mButtonDetailEdit;
@BindView(R.id.checkbox_delete)
CheckBox mCheckBoxDelete;
@BindView(R.id.view_line)
View mViewLine;
public ShoppingListParentViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
public void bindData(final ShoppingObj shoppingObj) {
mTextViewDate.setText(shoppingObj.getmDate());
mTextViewName.setText(shoppingObj.getmName());
mCheckBoxDelete.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
shoppingObj.setChecked(isChecked);
}
});
}
@OnClick(R.id.button_detail_edit)
void onClickButton(View v) {
if (mButtonDetailEdit.getText().equals(mContext.getString(R.string.details))) {
onClick(v);
} else {
listener.onRecyclerObjectClick(mShoppingList.get(getAdapterPosition()));
}
}
@Override
public void setExpanded(boolean expanded) {
super.setExpanded(expanded);
mButtonDetailEdit.setText(expanded ? R.string.edit : R.string.details);
mViewLine.setVisibility(expanded ? View.VISIBLE : View.INVISIBLE);
}
}
class ShoppingListChildViewHolder extends ChildViewHolder {
@BindView(R.id.textview_content)
TextView mTextViewContent;
public ShoppingListChildViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
public void bindData(ShoppingContentObj shoppingContentObj, int position) {
mTextViewContent.setText(String.valueOf(position + 1) + ". " + shoppingContentObj.getmName());
}
}
public void addMoreData(List<ShoppingObj> dataSwap) {
mShoppingList.addAll(mShoppingList.size(), dataSwap);
notifyParentDataSetChanged(false);
}
public void deleteItem() {
if (mShoppingList.size() == 0) {
return;
}
for (int i = mShoppingList.size() - 1; i >= 0; i--) {
if (mShoppingList.get(i).isChecked()) {
mShoppingList.remove(i);
notifyParentRemoved(i);
}
}
}
public void setLoaded() {
this.isLoading = false;
}
}
`