Мне нужна помощь, потому что я схожу с ума. У меня есть проект, в котором я уже реализовал вкладки. Теперь я хочу поставить Навигационный ящик. Все, что я хочу, - это когда я выбираю меню «Ящик», я меняю вкладки, но я не знаю, как на него ссылаться. Я показываю код MainActivity:
Как видите, я уже реализовал несколько вкладок. И ящик деятельности. Каждый элемент в блоке «Активность» вызывает фрагмент, а каждая вкладка, в свою очередь, вызывает другой фрагмент для отображения в ViewPager.
class MainActivity : ToolbarActivity() {
private var prevBottomSelected: MenuItem? = null
private lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toolbar: Toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)
setUpViewPager(getPagerAdapter())
setUpBottomNavigationBar()
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
val navView: NavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
appBarConfiguration = AppBarConfiguration(
setOf(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
R.id.nav_tools, R.id.nav_share, R.id.nav_send
), drawerLayout
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.drawer, menu)
return true
}
override fun onSupportNavigateUp(): Boolean {
val navController = findNavController(R.id.nav_host_fragment)
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
private fun getPagerAdapter(): PagerAdapter{
val adapter = PagerAdapter(supportFragmentManager)
adapter.addFragment(InfoFragment())
adapter.addFragment(RateFragment())
adapter.addFragment(ChatFragment())
return adapter
}
private fun setUpViewPager(adapter: PagerAdapter){
viewPager.adapter = adapter
viewPager.addOnPageChangeListener(object: ViewPager.OnPageChangeListener{
override fun onPageScrollStateChanged(state: Int) {}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {
// Selección de menu inferior, configuracion de como aparecen seleccionados
if(prevBottomSelected == null){
bottomNavigation.menu.getItem(0).isChecked = false
} else {
prevBottomSelected!!.isChecked = false
}
bottomNavigation.menu.getItem(position).isChecked = true
prevBottomSelected = bottomNavigation.menu.getItem(position)
}
})
}
private fun setUpBottomNavigationBar(){
bottomNavigation.setOnNavigationItemSelectedListener { item ->
when (item.itemId){
R.id.bottom_nav_info -> {
viewPager.currentItem = 0; true
}
R.id.bottom_nav_rates -> {
viewPager.currentItem = 1; true
}
R.id.bottom_nav_chat -> {
viewPager.currentItem = 2; true
}
else -> false
}
}
}}
Введите код PageAdapter. Мне нужно, чтобы при нажатии nav_home в Drawer на вкладке появлялись разные фрагменты и элементы.
class PagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT){
private val fragmentList = ArrayList<Fragment>()
override fun getItem(position: Int): Fragment {
return fragmentList[position]
}
override fun getCount(): Int {
return fragmentList.size
}
fun addFragment(fragment: Fragment){
fragmentList.add(fragment)}}