diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/prefs/EmptyViewRecyclerView.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/prefs/EmptyViewRecyclerView.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/prefs/EmptyViewRecyclerView.java b/WordPress/src/main/java/org/wordpress/android/ui/prefs/EmptyViewRecyclerView.java new file mode 100644 index 000000000..f48affb53 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/prefs/EmptyViewRecyclerView.java @@ -0,0 +1,72 @@ +package org.wordpress.android.ui.prefs; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.view.View; + +/** + * RecyclerView with setEmptyView method which displays a view when RecyclerView adapter is empty. + */ +public class EmptyViewRecyclerView extends RecyclerView { + private View mEmptyView; + + final private AdapterDataObserver observer = new AdapterDataObserver() { + @Override + public void onChanged() { + toggleEmptyView(); + } + + @Override + public void onItemRangeInserted(int positionStart, int itemCount) { + toggleEmptyView(); + } + + @Override + public void onItemRangeRemoved(int positionStart, int itemCount) { + toggleEmptyView(); + } + }; + + public EmptyViewRecyclerView(Context context) { + super(context); + } + + public EmptyViewRecyclerView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public EmptyViewRecyclerView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + public void setAdapter(Adapter adapterNew) { + final RecyclerView.Adapter adapterOld = getAdapter(); + + if (adapterOld != null) { + adapterOld.unregisterAdapterDataObserver(observer); + } + + super.setAdapter(adapterNew); + + if (adapterNew != null) { + adapterNew.registerAdapterDataObserver(observer); + } + + toggleEmptyView(); + } + + public void setEmptyView(View emptyView) { + mEmptyView = emptyView; + toggleEmptyView(); + } + + private void toggleEmptyView() { + if (mEmptyView != null && getAdapter() != null) { + final boolean empty = getAdapter().getItemCount() == 0; + mEmptyView.setVisibility(empty ? VISIBLE : GONE); + this.setVisibility(empty ? GONE : VISIBLE); + } + } +} |