2 years ago

#45858

test-img

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

Accepted video resources