March 6, 2021
How to show empty View in Activity Recyclerview?
package com.zakasoft.cashreceipt;
import android.content.Context;
import androidx.recyclerview.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
import androidx.recyclerview.widget.RecyclerView;
public class EmptyRecyclerView extends RecyclerView {
private View emptyView;
final private RecyclerView.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);
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 setEmptyView(View emptyView) {
this.emptyView = emptyView;
checkIfEmpty();
}
}
EmptyRecyclerView recyclerView; EmptyRecyclerView.Adapter adapter;
recyclerView = (EmptyRecyclerView)findViewById(R.id.todo_list_recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); // Fetch the empty view from the layout and set it on // the new recycler view View emptyView = findViewById(R.id.todo_list_empty_view); recyclerView.setEmptyView(emptyView);
<!-- Replaced android.support.v7.widget.RecyclerView with the
new EmptyRecyclerView -->
<com.zakasoft.cashreceipt.EmptyRecyclerView
android:id="@+id/todo_list_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- Added an empty view which will be shown when the EmptyRecyclerView
is empty -->
<LinearLayout
android:id="@+id/todo_list_empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:textAlignment="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/no_data_available"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="ADD NEW"/>
</LinearLayout>

