美文网首页
Fragment的隐藏/显示监听

Fragment的隐藏/显示监听

作者: hjm1fb | 来源:发表于2018-05-17 14:52 被阅读464次

    目前使用的监听方式如下:

    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);”

    相关文章

      网友评论

          本文标题:Fragment的隐藏/显示监听

          本文链接:https://www.haomeiwen.com/subject/kvpbdftx.html