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

上一篇下一篇

猜你喜欢

热点阅读