Giter Site home page Giter Site logo

endless-recycler-view-adapter's Introduction

endlessrecyclerviewadapter - endless recycler view adapter

Download

EndlessRecyclerViewAdapter lets users to load new pages when scrolling down to the bottom of a recyclerview list. Both list item and footer are fully customizable. Please feel free to contact me anytime you need: [email protected]

1.a Configure your gradle project file

allprojects {
  repositories {
      jcenter()
  }
}

1.b Configure your gradle module file

dependencies {
 ...
 compile 'com.rdo:endlessrecyclerviewadapter:1.0.1'
}
  1. Extends EndlessRecyclerViewAdapter and implement onCreateDataViewHolder, onBindDataViewHolder, onCreateFooterViewHolder and onBindFooterViewHolder methods.
@Override
  public BasicAdapter.ViewHolder onCreateDataViewHolder(ViewGroup parent, int viewType) {
      View view = this.inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
      return new ViewHolder(view);
  }

  @Override
  public void onBindDataViewHolder(ViewHolder holder, int position) {
      String item = this.data.get(position);
      holder.text.setText(item);
  }

  @Override
  public BasicAdapter.FooterViewHolder onCreateFooterViewHolder(ViewGroup parent, BasicAdapter.FooterViewHolder reusableFooterHolder) {
      if (reusableFooterHolder == null) {
          View view = inflater.inflate(R.layout.loading_footer_item, parent, false);
          return new FooterViewHolder(view);
      }
      return reusableFooterHolder;
  }

  @Override
  public void onBindFooterViewHolder(BasicAdapter.FooterViewHolder holder, int position) {
      holder.text.setText("Loading from item " + String.valueOf(position));
  }
  1. Set EndlessRecyclerViewScrollListener to the recyclerView
this.recyclerView.addOnScrollListener(new EndlessRecyclerViewScrollListener() {
          @Override
          public void onScrolledToBottom() {
              MainActivity.this.adapter.showLoadingIndicator();
              MainActivity.this.loadPage();
          }

          @Override
          public boolean endlessScrollEnabled() {
              return !MainActivity.this.adapter.isRefreshing() && !MainActivity.this.server.lastPageReached(); //Your flag used to check if there are more pages available
          }
});
  1. Do an async task and call addNewPage method
  private void loadPage() {
        server.getNextPage(new CallbackHandler() {
            @Override
            public void onNewPage(final List page) {
                MainActivity.this.adapter.addNewPage(page); //Call when the loading task finishes
            }
        });
  }

Sample

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.rdo.endlessrecyclerviewadapter.EndlessRecyclerViewAdapter;

import java.util.ArrayList;

public class BasicAdapter extends EndlessRecyclerViewAdapter<String, BasicAdapter.ViewHolder, BasicAdapter.FooterViewHolder> {

    protected BasicAdapter(ArrayList data, Context context) {
        super(data, context);
    }

    @Override
    public BasicAdapter.ViewHolder onCreateDataViewHolder(ViewGroup parent, int viewType) {
        View view = this.inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindDataViewHolder(ViewHolder holder, int position) {
        String item = this.data.get(position);
        holder.text.setText(item);
    }

    @Override
    public BasicAdapter.FooterViewHolder onCreateFooterViewHolder(ViewGroup parent, BasicAdapter.FooterViewHolder reusableFooterHolder) {
        if (reusableFooterHolder == null) {
            View view = inflater.inflate(R.layout.loading_footer_item, parent, false);
            return new FooterViewHolder(view);
        }
        return reusableFooterHolder;
    }

    @Override
    public void onBindFooterViewHolder(BasicAdapter.FooterViewHolder holder, int position) {
        holder.text.setText("Loading from item " + String.valueOf(position));
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private final TextView text;

        public ViewHolder(View itemView) {
            super(itemView);
            text = (TextView) itemView.findViewById(android.R.id.text1);
        }
    }

    public class FooterViewHolder extends RecyclerView.ViewHolder {
        private final TextView text;

        public FooterViewHolder(View itemView) {
            super(itemView);
            text = (TextView) itemView.findViewById(R.id.footer_text);
        }
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.