I'm experiencing an unusual blinking effect during page transitions in my current project using ViewPager2. Interestingly, when I use the same code in a new project, the transitions are smooth.
Current Project
Blinking Example
Activity Code
class TestActivity : AppCompatActivity() {
private val binding by lazy { ActivityTestBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(binding.root)
setupTabLayout(binding.viewPager, binding.tabLayout, listOf(ProfileFragment(), ProfileFragment()), listOf("First", "First"))
}
}
Layout XML
<layout xmlns:android=";
xmlns:app=";>
<data>
</data>
<LinearLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:contentDescription="@string/app_name"
app:tabIndicatorColor="@color/black"
app:tabIndicatorFullWidth="true"
app:tabMode="fixed"
app:tabRippleColor="@color/transparent"
app:tabSelectedTextColor="@color/black"
app:tabTextColor="@color/text_grey" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
</layout>
Pager Adapter and Setup Function
class PagerAdapter(activity: FragmentActivity, private val items: List<Fragment>) : FragmentStateAdapter(activity) {
override fun getItemCount() = items.size
override fun createFragment(position: Int) = items[position]
}
fun Activity.setupTabLayout(
viewPager2: ViewPager2,
tabLayout: TabLayout,
fragments: List<Fragment>,
titles: List<String>
) {
viewPager2.adapter = PagerAdapter(this as AppCompatActivity, fragments)
TabLayoutMediator(tabLayout, viewPager2) { tab, position ->
tab.text = titles[position]
}.attach()
}
New Project
No blinking
Activity Code
class MainActivity : AppCompatActivity() {
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(binding.root)
setupTabLayout(binding.viewPager, binding.tabLayout, listOf(FirstFragment(), FirstFragment()), listOf("First", "First"))
}
}
Layout XML
<layout xmlns:android=";
xmlns:app=";
xmlns:tools=";>
<data>
</data>
<LinearLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:context=".MainActivity">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:contentDescription="@string/app_name"
app:layout_constraintTop_toTopOf="parent"
app:tabIndicatorColor="@color/black"
app:tabIndicatorFullWidth="true"
app:tabMode="fixed"
app:tabRippleColor="@color/transparent"
app:tabSelectedTextColor="@color/black"
app:tabTextColor="@color/grey" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
</layout>
Pager Adapter and Setup Function
class PagerAdapter(fa: FragmentActivity, private val fragments: List<Fragment>) : FragmentStateAdapter(fa) {
override fun getItemCount() = fragments.size
override fun createFragment(position: Int) = fragments[position]
}
fun Activity.setupTabLayout(
viewPager2: ViewPager2,
tabLayout: TabLayout,
fragments: List<Fragment>,
titles: List<String>
) {
viewPager2.adapter = PagerAdapter(this as AppCompatActivity, fragments)
TabLayoutMediator(tabLayout, viewPager2) { tab, position ->
tab.text = titles[position]
}.attach()
}
Questions
Could someone help me understand:
What might be causing the blinking effect in my current project?
Is it human error, dependency incompatibility, or maybe an IDE error?How can I resolve this issue to achieve smooth transitions like in the new project?