Today we are implementing a ViewPager using Fragment. ViewPager on Android allows users to flip through from left to right.
In ViewPager App, we implemented a ViewPager that can navigate in two Fragments with different text. The Android ViewPager widget is in the support library and allows users to swipe left or right to view a completely new screen.
Viewpager implementation steps:
- Including the ViewPager widget in the XML layout (typically the main layout).
- Extending the FragmentPagerAdapter classes to create an Adapter.
- An adapter populates the Viewpager’s pages. PagerAdapter is the base class from which FragmentPagerAdapter and FragmentStatePagerAdapter extend.
Difference between FragmentPagerAdapter / FragmentStatePagerAdapter
- FragmentStatePagerAdapter: Only keeps the current fragment displayed on the screen in memory. This saves memory and should be used in applications that use dynamic fragments. (In this case, the number of fragments is not fixed.)
- FragmentPagerAdapter: Use this adapter when the number of fragments is fixed. An application with three tabs that will not change during the application’s runtime. The FragmentPagerAdapter will be used in this tutorial.
Preview: ViewPager Using Fragments
<–ViewPager Example
File: MainActivity.kt
package com.sagar.fragmentwithtablayoutviewpager
import android.os.Bundle
import androidx.annotation.Nullable
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.google.android.material.tabs.TabLayout
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var tab_viewpager = findViewById<ViewPager>(R.id.tab_viewpager)
var tab_tablayout = findViewById<TabLayout>(R.id.tab_tablayout)
setupViewPager(tab_viewpager)
tab_tablayout.setupWithViewPager(tab_viewpager)
}
private fun setupViewPager(viewpager: ViewPager) {
var adapter: ViewPagerAdapter = ViewPagerAdapter(supportFragmentManager)
adapter.addFragment(login_fragment(), "Login")
adapter.addFragment(sign_up_fragment(), "Signup")
viewpager.setAdapter(adapter)
}
class ViewPagerAdapter : FragmentPagerAdapter {
private var fragmentList1: ArrayList<Fragment> = ArrayList()
private var fragmentTitleList1: ArrayList<String> = ArrayList()
constructor(supportFragmentManager: FragmentManager)
: super(supportFragmentManager)
override fun getItem(position: Int): Fragment {
return fragmentList1.get(position)
}
@Nullable
override fun getPageTitle(position: Int): CharSequence {
return fragmentTitleList1.get(position)
}
override fun getCount(): Int {
return fragmentList1.size
}
fun addFragment(fragment: Fragment, title: String) {
fragmentList1.add(fragment)
fragmentTitleList1.add(title)
}
}
}
File: activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0F9D58"
android:theme="@style/AppTheme.AppBarOverlay">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_tablayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorColor="#FFF"
app:tabIndicatorHeight="3dp"
app:tabMode="fixed" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/tab_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
File: Login_fragment.kt
package com.sagar.fragmentwithtablayoutviewpager
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
class login_fragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_login_fragment, container, false)
}
}
File: fragment_login_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Login Fragment"
android:textColor="#880E4F"
android:textSize="25sp"
android:textStyle="bold" />
</LinearLayout>
File: sign_up_fragment.kt
package com.sagar.fragmentwithtablayoutviewpager
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
class sign_up_fragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_sign_up_fragment, container, false)
}
}
File:fragment_sign_up_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Signup Fragment"
android:textColor="#880E4F"
android:textSize="25sp"
android:textStyle="bold" />
</LinearLayout>
File: themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Fragmentwithtablayoutviewpager" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay"
parent="ThemeOverlay.AppCompat.Dark.ActionBar"
/>
<style name="AppTheme.PopupOverlay"
parent="ThemeOverlay.AppCompat.Light" />
</resources>
- We hope that this guide will assist you in quickly creating a simple Viewpager using fragments. If you have any problems, please post them in the comments section and we will gladly assist you.
Pingback: Android RecyclerView in Kotlin with Example - Developers Dome
Pingback: Option Menu in Android With Example - Developers Dome
Pingback: Shared preference in Android tutorial - Developers Dome
Pingback: Bottom Navigation Bar in Android with Example | Kotlin - Developers Dome