Android studio 在特定的导航栏片段内创建选项卡栏

Android studio 在特定的导航栏片段内创建选项卡栏,android-studio,kotlin,android-tablayout,android-bottomnav,Android Studio,Kotlin,Android Tablayout,Android Bottomnav,我的应用程序使用带有3个片段的底部导航栏[Settings/Home/Gallery]。 现在我正在尝试在“设置”中创建一个包含3个新选项卡的选项卡栏。[设置01/设置02/设置03] 我仔细阅读了本教程: 当视频使用viewPager时,我使用了viewPager2。 但我仍然停留在MainActivity.kt中,因为出于某些原因,这两行代码(来自教程)对我不起作用: viewPager2.adapter = PageAdapter(supportFragmentManager)

我的应用程序使用带有3个片段的底部导航栏[Settings/Home/Gallery]。 现在我正在尝试在“设置”中创建一个包含3个新选项卡的选项卡栏。[设置01/设置02/设置03]

我仔细阅读了本教程: 当视频使用viewPager时,我使用了viewPager2。 但我仍然停留在MainActivity.kt中,因为出于某些原因,这两行代码(来自教程)对我不起作用:

 viewPager2.adapter = PageAdapter(supportFragmentManager)
    tabLayout.setupWithViewPager(viewPager2)
这是我的整个MainActivity.kt文件:

package com.example.appname

import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.example.appname.ui.settings.PageAdapter
import kotlinx.android.synthetic.main.fragment_settings.*

class MainActivity : AppCompatActivity() {

 override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val navView: BottomNavigationView = findViewById(R.id.nav_view)
    val navController = findNavController(R.id.nav_host_fragment)
    val appBarConfiguration = AppBarConfiguration(setOf(
        R.id.navigation_settings, R.id.navigation_swapper, R.id.navigation_gallery))
    setupActionBarWithNavController(navController, appBarConfiguration)
    navView.setupWithNavController(navController)

    viewPager2.adapter = PageAdapter(supportFragmentManager)
    tabLayout.setupWithViewPager(viewPager2)
 }
}
我几乎可以肯定这个错误是存在的,因为由于我的应用程序的特殊情况,这两行应该在其他地方


为了让自己处于与我类似的情况,我建议您使用“底部导航活动”模板在android studio下启动一个新项目,然后按照教程进行操作。

我的一位朋友给我提供了解决方案。 MainActivity.kt中没有我想的新内容

以下是在设置片段中创建tabBar的新代码:

settingFragment.kt

class SettingsFragmentAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
private val fragments =
    listOf(
        fragment_setting_teams(),
        fragment_setting_general(),
        fragment_setting_movies()
    )

 override fun getItemCount(): Int = fragments.size

 override fun createFragment(position: Int): Fragment = fragments[position]
}


class SettingsFragment : Fragment() {
private lateinit var settingsViewModel: SettingsViewModel

private lateinit var settingsAdapter: SettingsFragmentAdapter
private lateinit var viewPager: ViewPager2
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val tabLayout = view.findViewById<TabLayout>(R.id.tabLayout)
    settingsAdapter =
        SettingsFragmentAdapter(
            this
        )
    viewPager = view.findViewById(R.id.viewPager2)
    viewPager.adapter = settingsAdapter
    TabLayoutMediator(tabLayout, viewPager) { tab, position ->
        when (position) {
            0 -> tab.text = "Teams"
            1 -> tab.text = "General"
            2 -> tab.text = "Movies"
        }
    }.attach()
}

override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
): View? {
    settingsViewModel =
            ViewModelProviders.of(this).get(SettingsViewModel::class.java)
    val root = inflater.inflate(R.layout.fragment_settings, container, false)
    return root
}
}
类设置碎片适配器(fragment:fragment):碎片状态适配器(fragment){
私有val片段=
列表(
片段设置团队(),
片段\设置\常规(),
片段设置电影()
)
重写getItemCount():Int=fragments.size
重写片段(位置:Int):片段=片段[位置]
}
类设置片段:片段(){
私有lateinit变量settingsViewModel:settingsViewModel
私有lateinit变量settingsAdapter:SettingsFragmentAdapter
私有lateinit var viewPager:ViewPager2
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
val tabLayout=view.findViewById(R.id.tabLayout)
设置适配器=
设置碎片适配器(
这
)
viewPager=view.findViewById(R.id.viewPager2)
viewPager.adapter=设置适配器
TabLayoutMediator(tabLayout,viewPager){选项卡,位置->
何时(职位){
0->tab.text=“团队”
1->tab.text=“常规”
2->tab.text=“电影”
}
}附(
}
覆盖创建视图(
充气机,
容器:视图组?,
savedInstanceState:捆绑?
):查看{
设置视图模型=
ViewModelProviders.of(this.get)(SettingsViewModel::class.java)
val root=充气机。充气(R.layout.fragment\u设置,容器,错误)
返回根
}
}