问题描述
我的应用程序使用具有3个片段的bottomNavBar [Settings / Home / gallery]。 现在,我正在尝试使用“设置”中的3个新选项卡创建一个TabBar。 [setting01 / setting02 / setting03]
我认真遵循了本教程:https://www.youtube.com/watch?v=qfFANw7nPMU 当视频使用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
}
}