Tab layout now syncs up with recyclerview scroll position; a bit sluggish though

This commit is contained in:
denizk0461
2023-04-12 09:46:27 +02:00
parent 7b33c68db9
commit a37b6dfd0b
2 changed files with 12 additions and 13 deletions
@@ -68,6 +68,7 @@ class EventFragment : Fragment() {
pagerSnapHelper.attachToRecyclerView(binding.recyclerView) pagerSnapHelper.attachToRecyclerView(binding.recyclerView)
// binding.recyclerView.scheduleLayoutAnimation() // binding.recyclerView.scheduleLayoutAnimation()
binding.recyclerView.scrollToPosition(dayOfWeek) binding.recyclerView.scrollToPosition(dayOfWeek)
binding.dayTabs.getTabAt(dayOfWeek)?.select()
} }
binding.fab.setOnClickListener { view -> binding.fab.setOnClickListener { view ->
@@ -75,24 +76,21 @@ class EventFragment : Fragment() {
} }
binding.recyclerView.addOnScrollListener(object : OnScrollListener() { binding.recyclerView.addOnScrollListener(object : OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy) override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
isUserScrolling = true super.onScrollStateChanged(recyclerView, newState)
val i = if (dx < 0) { if (newState == RecyclerView.SCROLL_STATE_IDLE) {
layoutManager.findFirstVisibleItemPosition() binding.dayTabs.getTabAt(layoutManager.findFirstVisibleItemPosition())?.select()
} else {
layoutManager.findLastVisibleItemPosition()
} }
binding.dayTabs.getTabAt(i)?.select()
} }
}) })
binding.dayTabs.addOnTabSelectedListener(object : OnTabSelectedListener { binding.dayTabs.addOnTabSelectedListener(object : OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) { override fun onTabSelected(tab: TabLayout.Tab) {
if (!isUserScrolling) { isUserScrolling = false
binding.recyclerView.smoothScrollToPosition(tab.position) binding.recyclerView.smoothScrollToPosition(tab.position)
Log.d("HELLO4", binding.recyclerView.scrollY.toString()) Log.d("HELLO4", binding.recyclerView.scrollY.toString())
} // TODO where to set isUserScrolling back to true? // TODO where to set isUserScrolling back to true?
} }
override fun onTabUnselected(tab: TabLayout.Tab?) {} override fun onTabUnselected(tab: TabLayout.Tab?) {}
override fun onTabReselected(tab: TabLayout.Tab?) {} override fun onTabReselected(tab: TabLayout.Tab?) {}
+2 -1
View File
@@ -25,7 +25,8 @@
android:id="@+id/day_tabs" android:id="@+id/day_tabs"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:tabMode="scrollable"> app:tabMode="scrollable"
android:layout_gravity="bottom">
<com.google.android.material.tabs.TabItem <com.google.android.material.tabs.TabItem
android:layout_width="wrap_content" android:layout_width="wrap_content"