Equivalent of ListView.setEmptyView in RecyclerView

前端 未结 13 1669
孤街浪徒
孤街浪徒 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:01

    Solution provided in this link seems perfect. It uses viewType to identify when to show emptyView. No need to create custom RecyclerView

    Adding code from the above link:

    package com.example.androidsampleproject;
    import java.util.ArrayList;
    import java.util.List;
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    public class RecyclerViewActivity extends Activity {
    
    RecyclerView recyclerView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler_view);
        recyclerView = (RecyclerView) findViewById(R.id.myList);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(new MyAdapter());
    }
    
    
    private class MyAdapter extends RecyclerView.Adapter {
        private List dataList = new ArrayList();
    
        public class EmptyViewHolder extends RecyclerView.ViewHolder {
            public EmptyViewHolder(View itemView) {
                super(itemView);
            }
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
            TextView data;
    
            public ViewHolder(View v) {
                super(v);
                data = (TextView) v.findViewById(R.id.data_view);
            }
        }
    
        @Override
        public int getItemCount() {
            return dataList.size() > 0 ? dataList.size() : 1;
        }
    
        @Override
        public int getItemViewType(int position) {
            if (dataList.size() == 0) {
                return EMPTY_VIEW;
            }
            return super.getItemViewType(position);
        }
    
    
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder vho, final int pos) {
            if (vho instanceof ViewHolder) {
                ViewHolder vh = (ViewHolder) vho;
                String pi = dataList.get(pos);
            }
        }
    
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v;
    
            if (viewType == EMPTY_VIEW) {
                v = LayoutInflater.from(parent.getContext()).inflate(R.layout.empty_view, parent, false);
                EmptyViewHolder evh = new EmptyViewHolder(v);
                return evh;
            }
    
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.data_row, parent, false);
            ViewHolder vh = new ViewHolder(v);
            return vh;
        }
    
        private static final int EMPTY_VIEW = 10;
    }
    
    }
    

提交回复
热议问题