Fragment的隐藏/显示监听
2018-05-17 本文已影响464人
hjm1fb
目前使用的监听方式如下:
abstract class BaseFragment : Fragment() {
/**
* 此fragment是否需要友盟页面路径统计
*/
private val umengPageReport = true
/**
* Get layoutId for this fragment
*/
abstract fun getLayoutId(): Int
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return inflater.inflate(getLayoutId(), container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
override fun onPause() {
super.onPause()
onVisibilityChange(false)
}
override fun onResume() {
super.onResume()
if (userVisibleHint) {
onVisibilityChange(true)
}
}
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
getUserVisibleHint()
if (isResumed) {
onVisibilityChange(isVisibleToUser)
}
}
/**
* fragment显示发生变化(切换/跳转/返回)时的回调
*
* @param visible 对用户可见或不可见
*/
@CallSuper
protected open fun onVisibilityChange(visible: Boolean) {
if (umengPageReport) {
if (visible) {
//
} else {
//
}
}
}
}
也暂时没遇到什么问题,后续如有需要还可以参考:
关于fragment到底是否可见的问题
也就是
“如果是通过FragmentTransaction的show和hide的方法来控制显示,调用的是onHiddenChanged. 若是初始就show的Fragment 为了触发该事件 需要先hide再show
eg: * transaction.hide(aFragment); * transaction.show(aFragment);”