2 years ago
#45858
Markus
IllegalStateException on ViewPager2 with TabLayoutMediator
Hit there!
Recently I am getting some crashes on my app with an implementation of ViewPager2 from this line:
com.google.android.material.tabs.TabLayoutMediator$ViewPagerOnTabSelectedListener.onTabSelected
Here is the stacktrace:
java.lang.IllegalStateException:
at androidx.viewpager2.widget.ViewPager2.setCurrentItem (ViewPager2.java:14)
at com.google.android.material.tabs.TabLayoutMediator$ViewPagerOnTabSelectedListener.onTabSelected (TabLayoutMediator.java)
at com.google.android.material.tabs.TabLayout.dispatchTabSelected (TabLayout.java)
at com.google.android.material.tabs.TabLayout.selectTab (TabLayout.java)
at com.google.android.material.tabs.TabLayout.selectTab (TabLayout.java)
at com.google.android.material.tabs.TabLayout$Tab.select (TabLayout.java)
at com.google.android.material.tabs.TabLayout$TabView.performClick (TabLayout.java)
at android.view.View.performClickInternal (View.java:7831)
at android.view.View.access$3600 (View.java:879)
at android.view.View$PerformClick.run (View.java:29359)
at android.os.Handler.handleCallback (Handler.java:883)
at android.os.Handler.dispatchMessage (Handler.java:100)
at android.os.Looper.loop (Looper.java:237)
at android.app.ActivityThread.main (ActivityThread.java:8167)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1100)
Actually what I use is a basic implementation of a ViewPager2 with a TabLayout as a dot indicator after my adapter:
binding.viewPager.adapter = ViewPagerAdapter(this, this)
TabLayoutMediator(binding.viewPagerTabIndicator, binding.viewPager) { _, _ -> }.attach()
This is my .xml file:
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:clipChildren="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/viewPagerTabIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:tabBackground="@drawable/indicator_selector"
app:tabIndicator="@null"
app:tabRippleColor="@null"
app:layout_constraintTop_toBottomOf="@+id/viewPagerButton"
app:layout_constraintEnd_toEndOf="@+id/viewPagerButton"
app:layout_constraintStart_toStartOf="@+id/viewPagerButton"/>
So far this occured for 8 users, impacted 13 times, only on Samsung devices. I have not found a way to reproduce this error so far. Does anyone have any ideas about this? I am pretty much stuck with it :/
Best regards, Markus
This is my adapter:
class ViewPagerAdapter(fragmentActivity: FragmentActivity, context: Context): FragmentStateAdapter(fragmentActivity) {
private val colorAccent: Int = context.getColorByAttributeId(R.attr.colorAccent)
private val buttonTextColorDark = ContextCompat.getColor(context, R.color.buttonTextColorDark)
private val buttonTextColorLight = ContextCompat.getColor(context, R.color.buttonTextColorLight)
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> FirstFragment.newInstance()
1 -> SecondFragment.newInstance(colorAccent, buttonTextColorDark, buttonTextColorLight)
else -> ThirdFragment.newInstance(colorAccent, buttonTextColorDark, buttonTextColorLight)
}
}
override fun getItemCount(): Int = 3
}
android
android-tablayout
illegalstateexception
android-viewpager2
0 Answers
Your Answer