RecyclerBindableAdapter

Additional

Language
Java
Version
N/A
Created
Oct 6, 2015
Updated
Jul 21, 2017 (Retired)
Owner
Danil Perevalov (princeparadoxes)
Contributors
Aleksandr Mirko (cosic)
Danil Perevalov (princeparadoxes)
2
Activity
Badge
Generate
Download
Source code

RecyclerBindableAdapter

Abstract adapter for convenient work with RecyclerView. It has several headers and footers.

Overview

The library contains five adapters:

  • RecyclerBindableAdapter - basic abstract adapter;
  • FilterBindableAdapter - abstract adapter extends RecyclerBindableAdapter, allows you to filter the items in the list;
  • ParallaxBindableAdapter - abstract adapter extends RecyclerBindableAdapter, allows you to apply to the Parallax header and footer;
  • SimpleBindableAdapter and SimpleParallaxBindableAdapter - simple version of the adapter, have a basic set of functions. Allows you to create adapter with a minimal amount of code.

Installation

Add compile 'com.github.princeparadoxes:recyclerbindableadapter:1.4.1' in your dependencies.

Or

Copy library module in your project. Add include ':library' in settings.gradle file. Add compile project (':library') in dependences build.gradle of your app.

Usage

RecyclerBindableAdapter.

It allows more convenient to work with the data inside RecyclerView. Basic methods:

  • Public void add (int position, T item) - adds an item to the specified position;
  • Public void add (T item) - adds an element to the end of the main list;
  • Public void addAll (List <? Extends T> items) - adds a list of items to the end of the main list;
  • Public void set (int position, T item) - replaces the element at the specified position;
  • Public void removeChild (int position) - removes the element at the specified position;
  • Public void clear () - cleans the main list;
  • Public void moveChildTo (int fromPosition, int toPosition) - moves the item to the specified position;
  • Public T getItem (int position) - returns the element at the specified position;
  • Public int indexOf (T object) - returns the position of the element in the list;
  • Public void addHeader (View header) - adds a Header in RecyclerView;
  • Public void removeHeader (View header) - removes Header from RecyclerView;
  • Public void addFooter (View footer) - adds Footer in RecyclerView;
  • Public void removeFooter (View footer) - removes the Footer of RecyclerView;
  • Public int getItemCount () - returns the number of elements in RecyclerView;
  • Public int getRealItemCount () - returns the number of elements in RecyclerView (without headers and footers).

To use RecyclerBindableAdapter need to extend them his adapter and create ViewHolder that extends RecyclerView.ViewHolder. An example of the adapter:

    // Expand our class from RecyclerBindableAdapter, as the parameters are        passed to a data type and ViewHolder
    public class LinearExampleAdapter extends RecyclerBindableAdapter<Integer, LinearViewHolder> {
    // Initialize ActionListener
    private LinearViewHolder.ActionListener actionListener;

    // Specify layoutId item
    @Override
    protected int layoutId(int type) {
        return R.layout.linear_example_item;
    }

    // Create a new instance of the view element
    @Override
    protected LinearViewHolder viewHolder(View view, int type) {
        return new LinearViewHolder(view);
    }

    // Pass data from the adapter element in ViewHolder
    @Override
    protected void onBindItemViewHolder(LinearViewHolder viewHolder, final int position, int type) {
        viewHolder.bindView(getItem(position), position, actionListener);
    }

    // Setter for ActionListener
    public void setActionListener(LinearViewHolder.ActionListener actionListener) {
        this.actionListener = actionListener;
    }

}

FilterBindableAdapter

Extends RecyclerBindableAdapter. Less flexible and requires more memory, but allows you to filter elements. The basic methods are not in RecyclerBindableAdapter:

  • Public Filter getFilter () - returns the filter;
  • Public void setOnFilterObjectCallback (OnFilterObjectCallback callback) - set interface that allows you to keep track of the number of elements after filtration.

An example of using a filter:

filterEditText.addTextChangedListener (new TextWatcher () {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                
            }

    // If you change the text inside filterEditText amended text is inserted as a filter
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                filterExampleAdapter.getFilter().filter(s);
            }

            Override
            public void afterTextChanged(Editable s) {

            }
        });

ParallaxBindableAdapter

Extends RecyclerBindableAdapter, unlike him, can only have one Header and Footer. The basic methods are not in RecyclerBindableAdapter:

  • Public void setParallaxHeader (boolean isParallaxHeader) - set false if you do not need to apply for Parallax Header (default true);
  • Public void setParallaxFooter (boolean isParallaxFooter) - set false if you do not need to apply for Parallax Footer (default true);
  • Public void setOnParallaxScroll (OnParallaxScroll parallaxScroll) - listener to track parallaxScroll (for example, to hide the ActionBar).

SimpleBindableAdapter and SimpleParallaxBindableAdapter

Extends RecyclerBindableAdapter and ParallaxBindableAdapter. Intended for simple lists. They have a very simple initialization. We need to create a ViewHolder, be sure that enhances BindableViewHolder. You can create your ActionListener which necessarily extends BindableViewHolder.ActionListener. Example initialization:

    // initialize SimpleBindableAdapter, indicates the type of items and ViewHolder inherited from BindableViewHolder
    private SimpleBindableAdapter<Integer> simpleExampleAdapter;

...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
                    ...............
        // pass it layoutId item and class ViewHolder
        simpleExampleAdapter = new SimpleBindableAdapter<>(R.layout.simple_example_item, SimpleViewHolder.class);
        simpleExampleRecycler.setAdapter(simpleExampleAdapter);
                    ...............
    }

    @Override
    protected void onResume() {
        super.onResume ();
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i <COUNT_ITEMS; i ++) {
            list.add (i + 1);
        }
        simpleExampleAdapter.clear();
        simpleExampleAdapter.addAll(list);
    }

Sample application

See [sample application] (sample/) for an example.

  • Example [RecyclerBindableAdapter] (sample/src/main/javacom/danil/recyclerbindableadapter/sample/linear)
  • Example [FilterBindableAdapter] (sample/src/main/javacom/danil/recyclerbindableadapter/sample/filter)
  • Example [RecyclerBindableAdapter with two item types] (sample/src/main/javacom/danil/recyclerbindableadapter/sample/grid)
  • Example [SimpleBindableAdapter] (sample/src/main/javacom/danil/recyclerbindableadapter/sample/simple)
  • Example [SimpleParallaxBindableAdapter] (sample/src/main/javacom/danil/recyclerbindableadapter/sample/parallax)

License

Copyright 2015 Danil Perevalov.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.