【问题标题】:Same fragment creating on sliding in ViewPager2在 ViewPager2 中滑动时创建相同的片段
【发布时间】:2021-05-15 04:20:55
【问题描述】:

我有 2 个片段想要在我的 viewpager2 中显示,但只有一个片段显示在两个选项卡的视图寻呼机中,尽管我在适配器中传递了两个片段,尽管我设置的标题是正确可见的。

目前我正在使用带有折叠工具栏的 viewpager2

父片段

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
    }
}

【问题讨论】:

    标签: android kotlin android-viewpager2


    【解决方案1】:

    您需要将 when 案例从 1, 2 更改为 0, 1,因为位置是从 0 开始的

    override fun createFragment(position: Int): Fragment {
    
        when (position) {
            0 -> { return ViewpagerFragment() }
            1 -> {return ViewPagerFragment2() }
        }
    
        return ViewpagerFragment()
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多