Switch to ViewPager2

This commit is contained in:
Gaurav Ujjwal 2021-05-05 11:21:04 +05:30
parent 7d8d6a7334
commit 0141a42cc2
4 changed files with 23 additions and 18 deletions

View file

@ -41,7 +41,7 @@ class HomeActivity : AppCompatActivity() {
binding = DataBindingUtil.setContentView(this, R.layout.activity_home)
binding.lifecycleOwner = this
tabController = TabController(supportFragmentManager, binding.pager, binding.tabs)
tabController = TabController(this, binding.pager, binding.tabs)
binding.drawerNav.setNavigationItemSelectedListener { onMenuItemSelected(it.itemId) }
binding.navigationBtn.setOnClickListener { binding.drawerLayout.open() }
binding.settingsBtn.setOnClickListener { showSettings() }

View file

@ -8,32 +8,34 @@
package com.gaurav.avnc.ui.home
import androidx.core.content.ContextCompat
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.gaurav.avnc.R
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
/**
* Controls tabs and associated pager in home activity.
*/
class TabController(val fragMgr: FragmentManager, private val pager: ViewPager, tabLayout: TabLayout) {
class TabController(val activity: HomeActivity, private val pager: ViewPager2, tabLayout: TabLayout) {
private data class PageInfo(
val fragment: Fragment,
val tabIconId: Int,
@DrawableRes val iconId: Int,
@StringRes val descriptionId: Int
)
private val pageList = listOf(
PageInfo(ServersFragment(), R.drawable.ic_computer),
PageInfo(DiscoveryFragment(), R.drawable.ic_search),
PageInfo(ServersFragment(), R.drawable.ic_computer, R.string.desc_saved_servers_tab),
PageInfo(DiscoveryFragment(), R.drawable.ic_search, R.string.desc_discovered_servers_tab),
)
private inner class PagerAdapter : FragmentPagerAdapter(fragMgr, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
override fun getCount() = pageList.size
override fun getItem(position: Int) = pageList[position].fragment
private inner class PagerAdapter : FragmentStateAdapter(activity) {
override fun getItemCount() = pageList.size
override fun createFragment(position: Int) = pageList[position].fragment
}
@ -42,12 +44,13 @@ class TabController(val fragMgr: FragmentManager, private val pager: ViewPager,
init {
pager.adapter = PagerAdapter()
tabLayout.setupWithViewPager(pager)
discoveryTab = tabLayout.getTabAt(1)!!
pageList.forEachIndexed { i, p ->
tabLayout.getTabAt(i)?.icon = ContextCompat.getDrawable(tabLayout.context, p.tabIconId)
val mediator = TabLayoutMediator(tabLayout, pager, true, true) { tab, position ->
tab.setIcon(pageList[position].iconId)
tab.setContentDescription(pageList[position].descriptionId)
}
mediator.attach()
discoveryTab = tabLayout.getTabAt(1)!!
}
fun showSavedServers() {

View file

@ -71,7 +71,7 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"

View file

@ -62,6 +62,8 @@
<string name="msg_copied_to_clipboard">Copied!</string>
<string name="desc_navigation_btn">Open Navigation Drawer</string>
<string name="desc_disconnected_icon">Disconnected state indicator icon</string>
<string name="desc_saved_servers_tab">Saved Servers</string>
<string name="desc_discovered_servers_tab">Discovered Servers</string>
<string name="desc_add_server_btn">Add Server</string>
<string name="desc_kb_btn">Show Keyboard</string>
<string name="desc_vk_btn">Show Virtual Keys</string>