在我的应用程序中,我有 BottomNavBar
,我想在单击此 BottomNavBar
的项目时显示 fragments
!
为了使用 BottomNavBar
设置此 fragments
,我使用了 NavigationGraph
成分!
我想对这个 fragment
之一使用 setUserVisibleHint
方法,但是当显示这个 fragment
时不调用 < strong>setUserVisibleHint
!
我的 Activity 代码,用于将 fragments
设置为 BottomNavBar
项目:
class HomeActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setupNavigation()
}
private fun setupNavigation() {
val navController = Navigation.findNavController(this, R.id.homePage_fragmentNavHost)
NavigationUI.setupWithNavController(homePage_bottomNavBar, navController)
}
override fun onSupportNavigateUp() = Navigation.findNavController(this, R.id.homePage_fragmentNavHost).navigateUp()
}
我的 fragment 代码:
class HomeDashboardFragment : Fragment(){
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home_dashboard, container, false)
}
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (isVisibleToUser) {
Handler().postDelayed({ requireContext().toast("Show") }, 500)
}
}
}
为什么不将 setUserVisibleHint
工作到 fragment
中?
最佳答案
由于 setUserVisibleHint(boolean aBoolean) 现在已弃用,对于那些仍然想知道 fragment 何时可见的人,您仍然可以使用
public FragmentTransaction setMaxLifecycle(Fragment fragment, Lifecycle.State state)
间接使用 FragmentPagerAdapter(或 FragmentStatePagerAdapter) 只需使用新的构造函数
MyFPagerAdapter(FragmentManager fm) {
super(fm ,FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
//...
}
请注意 FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 允许适配器在内部使用 setMaxLifecycle(通过 setPrimaryItem)而不是 setUserVisibleHint。 因此,在 fragment 的实现中,您将不再需要使用
setUserVisibleHint(boolean aBoolean)
但相反,onResume() 因为现在 onResume() 将仅针对可见 fragment 调用。其余的仍然可以到达 onCreateView()。
直接的方法是在添加或切换 fragment 时使用 setMaxLifeCycle 和 FragmentTransaction,然后
setMaxLifecycle(fragment, Lifecycle.State.STARTED);
等价
setUserVisibleHint(false);
和
setMaxLifecycle(fragment, Lifecycle.State.RESUMED);
相当于
setUserVisibleHint(true);
然后再次监听 Fragment 的 onResume() 回调
关于android - 如何在 Android 的 Fragment 中使用 setUserVisibleHint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56130557/