Equivalent of ListView.setEmptyView in RecyclerView

前端 未结 13 1670
孤街浪徒
孤街浪徒 2020-11-30 17:44

In RecyclerView, I want to set an empty view to be shown when the adapter is empty. Is there an equivalent of ListView.setEmptyView()?

13条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-11-30 17:48

    Try RVEmptyObserver:

    It's an implementation of an AdapterDataObserver that allows you to simply set a View as the default empty layout for your RecylerView. This way, instead of using a custom RecyclerView and making your life harder, you can easily use it with your existing code:


    Example Usage:

    RVEmptyObserver observer = new RVEmptyObserver(recyclerView, emptyView)
    rvAdapter.registerAdapterDataObserver(observer);
    

    You can see the code and example usage in an actual app here.


    Class:

    public class RVEmptyObserver extends RecyclerView.AdapterDataObserver {
        private View emptyView;
        private RecyclerView recyclerView;
    
        public RVEmptyObserver(RecyclerView rv, View ev) {
            this.recyclerView = rv;
            this.emptyView    = ev;
            checkIfEmpty();
        }
    
        private void checkIfEmpty() {
            if (emptyView != null && recyclerView.getAdapter() != null) {
                boolean emptyViewVisible = recyclerView.getAdapter().getItemCount() == 0;
                emptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
                recyclerView.setVisibility(emptyViewVisible ? View.GONE : View.VISIBLE);
            }
        }
    
        public void onChanged() { checkIfEmpty(); }
        public void onItemRangeInserted(int positionStart, int itemCount) { checkIfEmpty(); }
        public void onItemRangeRemoved(int positionStart, int itemCount) { checkIfEmpty(); }
    }
    

提交回复
热议问题