package slidenerd.vivz.bucketdrops.widgets;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import slidenerd.vivz.bucketdrops.extras.Util;
public class BucketRecyclerView extends RecyclerView {
/**
* The View to display when the RecyclerView has no items at all
*/
private List<View> mNonEmptyViews = Collections.emptyList();
private List<View> mEmptyViews = Collections.emptyList();
private AdapterDataObserver mObserver = new AdapterDataObserver() {
/**
* Whenever this method is triggered, if the RecyclerView has some items to display, show it and hide the empty view otherwise do the reverse
*/
@Override
public void onChanged() {
hideIfEmpty();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
hideIfEmpty();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
hideIfEmpty();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
hideIfEmpty();
}
};
public BucketRecyclerView(Context context) {
super(context);
}
public BucketRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public BucketRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
private void hideIfEmpty() {
if (getAdapter() != null && !mNonEmptyViews.isEmpty() && !mEmptyViews.isEmpty()) {
if (getAdapter().getItemCount() == 0) {
Util.showViews(mEmptyViews);
BucketRecyclerView.this.setVisibility(View.GONE);
Util.hideViews(mNonEmptyViews);
} else {
Util.hideViews(mEmptyViews);
BucketRecyclerView.this.setVisibility(View.VISIBLE);
Util.showViews(mNonEmptyViews);
}
}
}
@Override
public void setAdapter(Adapter adapter) {
super.setAdapter(adapter);
if (adapter != null) {
//Register an AdapterDataSetObserver to monitor the number of items in the RecyclerView whenever items are being added, removed
adapter.registerAdapterDataObserver(mObserver);
}
mObserver.onChanged();
}
public void setViewsToHideWhenEmpty(View... views) {
mNonEmptyViews = Arrays.asList(views);
}
public void setViewsToShowWhenEmpty(View... views) {
mEmptyViews = Arrays.asList(views);
}
}