在 ViewPager2 中滑动时创建的相同片段
Same fragment creating on sliding in ViewPager2
我有 2 个片段想在我的 viewpager2 中显示,但只有一个显示在两个选项卡的视图寻呼机中,即使我在我的适配器中传递了两个片段,尽管我设置的标题是正确可见的。
目前我正在使用带有折叠工具栏的 viewpager2
ParentFragment
class MessagesFragment : Fragment() {
private lateinit var binding: FragmentMessagesBinding
private lateinit var adapter:ViewPager2Adapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View {
// context?.theme?.applyStyle(R.style.ViewPagerTheme, true);
binding = FragmentMessagesBinding.inflate(inflater, container, false)
val fm: FragmentManager? = activity?.supportFragmentManager
adapter = fm?.let { ViewPager2Adapter(it, lifecycle) }!!
binding.pager.adapter = adapter
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("First"));
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("Second"));
binding.pager.setPageTransformer(ZoomOutPageTransformer())
binding.tabLayout.addOnTabSelectedListener(object : OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
binding.pager.currentItem = tab.position
}
override fun onTabUnselected(tab: TabLayout.Tab) {}
override fun onTabReselected(tab: TabLayout.Tab) {}
})
binding.pager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
binding.tabLayout.selectTab(binding.tabLayout.getTabAt(position))
}
})
return binding.root
}
}
ViewPagerAdapter
class ViewPager2Adapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragmentManager, lifecycle) {
override fun createFragment(position: Int): Fragment {
when (position) {
1 -> { return ViewpagerFragment() }
2 -> {return ViewPagerFragment2() }
}
return ViewpagerFragment()
}
override fun getItemCount(): Int {
return 2
}
}
您需要将 when
个案例从 1, 2
更改为 0, 1
,因为位置是从 0 开始的
override fun createFragment(position: Int): Fragment {
when (position) {
0 -> { return ViewpagerFragment() }
1 -> {return ViewPagerFragment2() }
}
return ViewpagerFragment()
}
我有 2 个片段想在我的 viewpager2 中显示,但只有一个显示在两个选项卡的视图寻呼机中,即使我在我的适配器中传递了两个片段,尽管我设置的标题是正确可见的。
目前我正在使用带有折叠工具栏的 viewpager2
ParentFragment
class MessagesFragment : Fragment() {
private lateinit var binding: FragmentMessagesBinding
private lateinit var adapter:ViewPager2Adapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View {
// context?.theme?.applyStyle(R.style.ViewPagerTheme, true);
binding = FragmentMessagesBinding.inflate(inflater, container, false)
val fm: FragmentManager? = activity?.supportFragmentManager
adapter = fm?.let { ViewPager2Adapter(it, lifecycle) }!!
binding.pager.adapter = adapter
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("First"));
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("Second"));
binding.pager.setPageTransformer(ZoomOutPageTransformer())
binding.tabLayout.addOnTabSelectedListener(object : OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
binding.pager.currentItem = tab.position
}
override fun onTabUnselected(tab: TabLayout.Tab) {}
override fun onTabReselected(tab: TabLayout.Tab) {}
})
binding.pager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
binding.tabLayout.selectTab(binding.tabLayout.getTabAt(position))
}
})
return binding.root
}
}
ViewPagerAdapter
class ViewPager2Adapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragmentManager, lifecycle) {
override fun createFragment(position: Int): Fragment {
when (position) {
1 -> { return ViewpagerFragment() }
2 -> {return ViewPagerFragment2() }
}
return ViewpagerFragment()
}
override fun getItemCount(): Int {
return 2
}
}
您需要将 when
个案例从 1, 2
更改为 0, 1
,因为位置是从 0 开始的
override fun createFragment(position: Int): Fragment {
when (position) {
0 -> { return ViewpagerFragment() }
1 -> {return ViewPagerFragment2() }
}
return ViewpagerFragment()
}