ViewPager2迁移后TabLayout指示器默认消失,滑动后才显示求助
问题:ViewPager2迁移后TabLayout指示器默认不显示,滑动后正常出现
将项目从ViewPager迁移至ViewPager2后,出现如下问题:打开应用时TabLayout指示器默认不显示,但执行滑动操作后指示器会正常出现。我认为代码实现无问题,以下是简化后的Kotlin代码与XML代码:
class ScheduleWeekFragment : ScheduleBaseFragment<ScheduleWeekViewModel>(ScheduleWeekViewModel::class) { private val viewBinding by viewBinding(FragmentWeekBinding::bind) private var titles: Array<String>? = null // listeners private val viewPagerListener = object : ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { viewModel.updateDayTitle(position) } } // observers private val selectedDayObserver = Observer<Int> { viewBinding.viewPager2.currentItem = it } // lifecycle override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) titles = context?.resources?.getStringArray(R.array.schedule_fragment_day_abbreviations) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = inflater.inflate(R.layout.fragment_week, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) viewBinding.viewPager2.adapter = ScheduleViewPagerAdapter(this) viewBinding.viewPager2.setPageTransformer(ZoomOutPageTransformer) TabLayoutMediator(viewBinding.tabLayout, viewBinding.viewPager2) { tab, position -> tab.text = titles?.getOrNull(position) }.attach() // observers viewModel.viewPagerPosition.observe(viewLifecycleOwner, selectedDayObserver) // listeners viewBinding.viewPager2.registerOnPageChangeCallback(viewPagerListener) } override fun onDestroyView() { viewBinding.viewPager2.unregisterOnPageChangeCallback(viewPagerListener) super.onDestroyView() } }
以下是简化后的XML代码:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fragmentWeek" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorPrimary" 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/tabLayout" style="@style/TabLayout1" android:layout_width="match_parent" android:layout_height="40dp" android:verticalScrollbarPosition="left" app:layout_constraintEnd_toEndOf="@+id/viewPager2" app:layout_constraintStart_toStartOf="@+id/viewPager2" app:layout_constraintTop_toBottomOf="@+id/scheduleToolbar" app:tabGravity="start" app:tabMode="scrollable" android:background="@color/white" tools:ignore="SpeakableTextPresentCheck" /> <androidx.viewpager2.widget.ViewPager2 android:id="@+id/viewPager2" android:layout_width="0dp" android:layout_height="0dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:background="@color/white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tabLayout" tools:ignore="SpeakableTextPresentCheck" /> </androidx.constraintlayout.widget.ConstraintLayout>
内容的提问来源于stack exchange,提问作者Georgiy Chebotarev
相关产品推荐
相关产品推荐

