ViewPager in Android

Overview

Viewpager is a layout manager which allows a user to flip left or right throughout the pages of our application with data.

Steps to create a static ViewPager

  • Create an Enum for all the layouts
 enum class ModelObject(val titleId : Int , val layoutId : Int)
{
RED(R.string.red , R.layout.red_view) ,
BLUE(R.string.blue , R.layout.blue_view) ,
GREEN(R.string.green , R.layout.green_view);
}
  • Create a class and extend it with PagerAdapter. Apart from implementing the abstract methods isViewFromObject and getCount, you also have to override instantiateItem and destroyItem
 class CustomPagerAdapter(private val context : Context) : PagerAdapter()
{
override fun getCount() : Int
{
return ModelObject.values().size
}

override fun isViewFromObject(view : View , `object` : Any) : Boolean
{
return view == `object`
}

override fun instantiateItem(container : ViewGroup , position : Int) : Any
{
val modelObject : ModelObject = ModelObject.values()[position]
val layoutInflater : LayoutInflater = LayoutInflater.from(context)
val layout = layoutInflater.inflate(modelObject.layoutId , container , false)
container.addView(layout)
return layout
}

override fun destroyItem(container : ViewGroup , position : Int , `object` : Any)
{
container.removeView(`object` as View)
}

}
  • Use the reference of ViewPager in MainActivity
 class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState : Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewpager.adapter = CustomPagerAdapter(this)
}
}

Steps to create a static ViewPager2

  • Add the required dependency in build.gradle (Module) file.
 implementation "com.google.android.material:material:1.6.0-alpha01"
  • Add few images in drawable.
  • Create a class for the adapter. Create an inner class and extend it with RecyclerView.ViewHolder. Then implement RecyclerView.Adapter in the class and override all the implementing methods.
 class ViewPagerAdapter(private val images : List<Int>) :
RecyclerView.Adapter<ViewPagerAdapter.ViewPagerHolder>()
{
inner class ViewPagerHolder(itemView : View) : RecyclerView.ViewHolder(itemView)

override fun onCreateViewHolder(parent : ViewGroup , viewType : Int) : ViewPagerHolder
{
val view =
LayoutInflater.from(parent.context).inflate(R.layout.item_view_layout , parent , false)
return ViewPagerHolder(view)
}

override fun onBindViewHolder(holder : ViewPagerHolder , position : Int)
{
val currentImage = images[position]
holder.itemView.imgImageContainer.setImageResource(currentImage)
}

override fun getItemCount() : Int
{
return images.size
}
}
  • Set the adapter of ViewPager2 in MainActivity.
 class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState : Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val images = listOf(
R.drawable.ic_4g ,
R.drawable.ic_airport_shuttle ,
R.drawable.ic_launcher_background ,
R.drawable.ic_launcher_foreground
)
val adapter = ViewPagerAdapter(images)
viewpager2.apply {
this.adapter = adapter
this.orientation = ViewPager2.ORIENTATION_VERTICAL
this.beginFakeDrag()
this.fakeDragBy(-10f)
this.endFakeDrag()
}
}
}
  • Hello World

Reference

Comments

Popular posts from this blog

SSLSocketFactory in Android

Architecture Components in Android

DataBinding in Android