TabLayout-如何仅在按Tab时加载片段

问题描述

我正在使用带有TabLayout的ViewPager。选项卡之一是ArFragment。 当Activity启动时,TabLayout会迭代每个选项卡并对其进行初始化,即使未按下适当的选项卡,也会导致ArFragment请求摄像机许可。

经过广泛的搜索,我得出的结论是SceneForm不允许控制摄像机许可请求的时间,因此唯一的选择是控制标签的加载时间。

如何使TabLayout不在初始化时加载特定的标签(但在此之后更改标签时仍要记住它是实例)?

关于眼前的事情: 我尝试使用addOnTabSelectedListener,但不确定如何继续使用它:

tabs.addOnTabSelectedListener(object :
        TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
        override fun onTabReselected(tab: TabLayout.Tab) {
            when(tab.position) {
                // First Tab
                0 -> return

                // AR
                1 -> // I want to create a new ARFragment() and inflate it to this tab's fragment container. But how?
            }
        }
    })

有什么建议吗?

解决方法

class ArFragment : ... {

    override fun onCreateView(
        inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_ar,container,false)
    }
    
    ovveride fun onResume() {
      // init variables
      // init views
    }
}

class MyViewPagerAdapter(private val context: Context,fm: FragmentManager,private val noOfTabs: Int) : FragmentPagerAdapter(fm,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
   .......
   .......
}

在片段的onResume()中执行所有与片段相关的工作,并确保使用FragmetnPagerAdapter扩展ViewPager适配器类中的behavior=BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT。您可以检查上面的代码段。

让我知道您是否遇到任何问题。