Giter Site home page Giter Site logo

vijaymakwana / easypageradapter Goto Github PK

View Code? Open in Web Editor NEW
11.0 5.0 0.0 454 KB

Easiest android view pager adapter implementation

License: Apache License 2.0

Kotlin 80.80% Java 19.20%
android kotlin-android kotlin java viewpager adapter pager-adapter androidx viewpager-adapter pageradapter viewpager2

easypageradapter's Introduction

EasyPagerAdapter License

Easiest android ViewPager adapter implementation, Don't write ViewPager adapter ever again

  • Based on Android Data Binding

  • Written in Kotlin

  • No need to write the ViewPager adapter

  • No need to modify your model classes

  • Minimum API Level support 21

  • Supports multiple item view types

  • Optional Callbacks/Listeners

  • Efficient and easy API

  • Tiny in size

  • Support Kotlin and Java

  • Support AndroidX

  • Support ViewPager2

Setup

Migrate the project to AndroidX, do the following steps for migration Refactor -> Migrate to AndroidX

Gradle

Add this in your project level build.gradle file (not your module build.gradle file):

allprojects {
 repositories {
        maven { url "https://jitpack.io" } // add this line
    }
}

Then, add the library to your module build.gradle

// apply plugin: 'kotlin-kapt' // this line only for Kotlin projects

android {
    ...
    buildFeatures {
      dataBinding true
  	} 
}

dependencies {
 implementation 'com.github.VijayMakwana:EasyPagerAdapter:1.1.0'
}

Usage

Create your item layouts with <layout> as root:

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable name="item"
                  type="com.easypageradapter.easypageradaptersample.data.PersonDetail"/>
    </data>
    
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@{item.name}"/>
        
</layout>
// Kotlin
mBinding.viewPager.setEasyPagerAdapter(mPageList, BR.item)
                .map<ImageModel>(R.layout.item_view_pager_image)
                .map<PersonDetail>(R.layout.item_view_pager_person_detail_item)
// Java
new EasyPagerAdapter(mPageList, BR.item)
                .map(ImageModel.class, R.layout.item_view_pager_image)
                .map(PersonDetail.class, R.layout.item_view_pager_person_detail_item)
                .into(mBinding.viewPager);

If you want to attach callbacks or listeners then you can do like this

// Kotlin sample
     mBinding.viewPager.setEasyPagerAdapter(mPageList)
                .map<ImageModel>(R.layout.item_view_pager_image, BR.item)
                .map<PersonDetail, ItemViewPagerPersonDetailBinding>
         (R.layout.item_view_pager_person_detail, BR.person)
                { itemBind ->
                    itemBind.btnSubmit.setOnClickListener {
                     Toast.makeText(this@KotlinDemoActivity,
                     "Submit Button Clicked in the Person ${itemBind.person?.name} Page",
                           Toast.LENGTH_LONG).show()
                    }
                }
// Java sample
new EasyPagerAdapter(mPageList)
          .map(ImageModel.class, R.layout.item_view_pager_image, BR.item)
          .map(PersonDetail.class,
              R.layout.item_view_pager_person_detail,
              BR.person, new PagerCallBack<ItemViewPagerPersonDetailBinding>() {
                  @Override
                  public void onBind(final ItemViewPagerPersonDetailBinding itemBind) {
                     itemBind.btnSubmit.setOnClickListener(new View.OnClickListener() {
                       @Override
                       public void onClick(View view) {
                        Toast.makeText(JavaDemoActivity.this,
                         "Submit Button Clicked in the Person " + 
                itemBind.getPerson().getName() +
                           " Page", Toast.LENGTH_LONG).show();
                                    }
                                });
                            }
                        })
                .into(mBinding.viewPager);

set fragment pager adapter

 mBinding.viewPager.setEasyFragmentPagerAdapter
 (supportFragmentManager, listOf(FragmentA(), FragmentB()))

set fragment state pager adapter

 mBinding.viewPager.setEasyFragmentStatePagerAdapter
 (supportFragmentManager, listOf(FragmentA(), FragmentB()))

set viewpager2 fragment state adapter

// ViewPager2
mBinding.viewPager2.setEasyFragmentStateAdapter(fragmmentActivity, listOf(FragmentA(), FragmentB(),FragmentC(), FragmentD()))

Check out the wiki for detailed documentation and usage examples.

Wiki

Special thanks to LastAdapter by @Miguel Ángel Moreno for inspiring this library

easypageradapter's People

Contributors

vijayinexture avatar vijaymakwana avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

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.