Search code examples
androidkotlintabsfragment

Tablayout doesn't work in Fragment in Android kotlin


I'm trying to add tablayout in one of my fragments.

tablayout in mainActivity works well, but tablayout in fragment doesn't work.

Tab menu shows well, but nothing comes up in my viewPager.

I want to make like this. and it's my app

HomeDetailFragment.kt

class HomeDetailFragment : Fragment() {
lateinit var homeDetailRecyclerViewAdapter : HomeDetailRecyclerViewAdapter

private val myContext = FragmentActivity()

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_home_detail, container, false)

}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    configureTopNavigation()
}

private fun configureTopNavigation(){
    vp_home_detail.adapter = HomeDetailPagerAdapter(myContext.supportFragmentManager, 5)

    vp_home_detail.offscreenPageLimit = 5
    tl_home_detail_bar.setupWithViewPager(vp_home_detail)

}

}

HomeDetailPagerAdapter.kt

class HomeDetailPagerAdapter (fm : FragmentManager, val fragmentCount : Int): FragmentStatePagerAdapter(fm){

private val fragmentTitleList = mutableListOf("전체", "요가","발레", "태권도", "헬스")

override fun getItem(position:Int): Fragment{

    when(position){
        0-> return HomeFragment()
        1-> return WholeFragment()
        2-> return YogaFragment()
        3-> return BalletFragment()
        4-> return TakFragment()
        else -> return HomeFragment()
    }
}

override fun getPageTitle(position: Int):CharSequence?{
    return fragmentTitleList[position]
}
override fun getCount(): Int = fragmentCount

}

fragment_home_detail.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f2f7ff"
tools:context=".ui.home.HomeDetailFragment">

<com.google.android.material.tabs.TabLayout
    android:id="@+id/tl_home_detail_bar"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:background="#ffffff"
    app:tabIndicatorColor="#2c77f1"
    android:layout_alignParentTop="true"
    android:theme="@style/HomeDetailTab"
    android:elevation="5dp" />

<androidx.viewpager.widget.ViewPager
    android:id="@+id/vp_home_detail"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/tl_home_detail_bar"/>


Solution

  • Use childFragmentManager instead of myContext.supportFragmentManager

    vp_home_detail.adapter = HomeDetailPagerAdapter(childFragmentManager, 5)