Equivalent of ListView.setEmptyView in RecyclerView

前端 未结 13 1690
孤街浪徒
孤街浪徒 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 18:07

    public class EmptyRecyclerView extends RecyclerView {
      @Nullable View emptyView;
    
      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) {
          emptyView.setVisibility(getAdapter().getItemCount() > 0 ? GONE : VISIBLE);
        }
      }
    
      final @NotNull AdapterDataObserver observer = new AdapterDataObserver() {
        @Override public void onChanged() {
          super.onChanged();
          checkIfEmpty();
        }
      };
    
      @Override public void setAdapter(@Nullable Adapter adapter) {
        final Adapter oldAdapter = getAdapter();
        if (oldAdapter != null) {
          oldAdapter.unregisterAdapterDataObserver(observer);
        }
        super.setAdapter(adapter);
        if (adapter != null) {
          adapter.registerAdapterDataObserver(observer);
        }
      }
    
      public void setEmptyView(@Nullable View emptyView) {
        this.emptyView = emptyView;
        checkIfEmpty();
      }
    }
    

    something like this might help

提交回复
热议问题