Skip to content
Extension of RecyclerView.Adapter with header/footer. Go for list and grid. Support load more function. Easy to use.
Java
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea
gradle/wrapper
library
sample
.gitignore
README.md
RecyclerView-WithHeaderAndfooter.iml
android-RecyclerView-WithHeaderAndFooter.iml
build.gradle
gradle.properties
gradlew
gradlew.bat
screenshot_grid.png
screenshot_list.png
settings.gradle

README.md

android-RecyclerView-WithHeaderAndFooter

Extension of RecyclerView.Adapter. Can add header/footer to RecyclerView for LinearLayoutManager and GridLayoutManager.

Screenshot

Screenshot Screenshot

Usage

Add Header/Footer View to RecyclerView

Step 1

  • Create Adapter Class which extends HFRecyclerViewAdapter
   class HFAdapter extends HFRecyclerViewAdapter<String, HFAdapter.DataViewHolder>{

        public HFAdapter(Context context) {
            super(context);
        }

        @Override
        public void footerOnVisibleItem() {
            if(!isLoading){
                // loading more data, when load done, should set isLoading to false.
                //...
                isLoading = true;
            }
        }
        @Override
        public DataViewHolder onCreateDataItemViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.data_item, parent, false);
            return new DataViewHolder(v);
        }

        @Override
        public void onBindDataItemViewHolder(DataViewHolder holder, int position) {
            holder.itemTv.setText(getData().get(position));
        }

        class DataViewHolder extends RecyclerView.ViewHolder{
            TextView itemTv;
            public DataViewHolder(View itemView) {
                super(itemView);
                itemTv = (TextView)itemView.findViewById(R.id.itemTv);
            }
        }
    }

Step 2

  • Use Adapter to add header/footer for RecyclerView
// set Adapter
final HFAdapter hfAdapter = new HFAdapter(this);
recyclerView.setAdapter(hfAdapter);

// add header
View headerView = LayoutInflater.from(this).inflate(R.layout.header, recyclerView, false);
hfAdapter.setHeaderView(headerView);
// add footer
View footerView = LayoutInflater.from(this).inflate(R.layout.footer, recyclerView, false);
hfAdapter.setFooterView(footerView);

// remove header
hfAdapter.removeHeader();
// remove footer
hfAdapter.removeFooter();

// set data
ArrayList<String> data = new ArrayList<>();
for (int i=0; i<8; i++){
    data.add(String.format("Item %d", i));
}
hfAdapter.setData(data);
  • For GridLayoutManager
final GridLayoutManager manager = new GridLayoutManager(this, 3);
recyclerView.setLayoutManager(manager);
//Set header/footer's spanCount to match parent in horizontal.
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        if ( (hfAdapter.hasHeader() && hfAdapter.isHeader(position)) ||
                hfAdapter.hasFooter() && hfAdapter.isFooter(position) )
            return manager.getSpanCount();

        return 1;
    }
});

END

You can’t perform that action at this time.