Is there an addHeaderView equivalent for RecyclerView?

后端 未结 19 1972
独厮守ぢ
独厮守ぢ 2020-11-21 23:35

I\'m looking for an equivalent to addHeaderView for a recycler view. Basically I want to have an image with 2 buttons be added as a header to the listview. Is there a differ

19条回答
  •  佛祖请我去吃肉
    2020-11-22 00:38

    you can create addHeaderView and use

    adapter.addHeaderView(View).

    This code build the addHeaderView for more then one header. the headers should have:

    android:layout_height="wrap_content"

    public class MyAdapter extends RecyclerView.Adapter {
        private static final int TYPE_ITEM = -1;
        public class MyViewSHolder extends RecyclerView.ViewHolder {
            public MyViewSHolder (View view) {
                super(view);
            }
            // put you code. for example:
            View mView;
            ...
        }
    
        public class ViewHeader extends RecyclerView.ViewHolder {
            public ViewHeader(View view) {
                super(view);
            }
        }
    
        private List mHeaderViews = new ArrayList<>();
        public void addHeaderView(View headerView) {
            mHeaderViews.add(headerView);
        }
    
        @Override
        public int getItemCount() {
           return ... + mHeaderViews.size();
        }
    
        @Override
        public int getItemViewType(int position) {
            if (mHeaderViews.size() > position) {
                return position;
            }
    
            return TYPE_ITEM;
        }
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            if (viewType != TYPE_ITEM) {
                //inflate your layout and pass it to view holder
                return new ViewHeader(mHeaderViews.get(viewType));
            }
            ...
        }
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int basePosition1) {
            if (holder instanceof ViewHeader) {
                return;
            }
            int basePosition = basePosition1 -  mHeaderViews.size();
            ...
        }
    }
    

提交回复
热议问题