Skip to content

Instantly share code, notes, and snippets.

@vmax
Forked from meoyawn/EmptyRecyclerView.java
Last active July 10, 2016 12:29
Show Gist options
  • Save vmax/b5e692cc600f02cd75b61e38f3d03dde to your computer and use it in GitHub Desktop.
Save vmax/b5e692cc600f02cd75b61e38f3d03dde to your computer and use it in GitHub Desktop.
RecyclerView doesn't have an emptyView support, we gotta fix that (but you may also need to show a view when it's non empty, that's why the fork)
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
public class EmptyRecyclerView extends RecyclerView {
private View emptyView, nonEmptyView;
final private AdapterDataObserver observer = new AdapterDataObserver() {
@Override
public void onChanged() {
checkIfEmpty();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
checkIfEmpty();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
checkIfEmpty();
}
};
public EmptyRecyclerView(Context context) {
super(context);
}
public EmptyRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EmptyRecyclerView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
void checkIfEmpty() {
if (emptyView != null && getAdapter() != null) {
final boolean emptyViewVisible =
getAdapter().getItemCount() == 0;
emptyView.setVisibility(emptyViewVisible ? VISIBLE : GONE);
if (nonEmptyView != null)
{
nonEmptyView.setVisibility(emptyViewVisible ? GONE : VISIBLE);
}
setVisibility(emptyViewVisible ? GONE : VISIBLE);
}
}
@Override
public void setAdapter(Adapter adapter) {
final Adapter oldAdapter = getAdapter();
if (oldAdapter != null) {
oldAdapter.unregisterAdapterDataObserver(observer);
}
super.setAdapter(adapter);
if (adapter != null) {
adapter.registerAdapterDataObserver(observer);
}
checkIfEmpty();
}
public void setNonEmptyView(View nonEmptyView)
{
this.nonEmptyView = nonEmptyView;
checkIfEmpty();
}
public void setEmptyView(View emptyView) {
this.emptyView = emptyView;
checkIfEmpty();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment