Fragment的隐藏/显示监听

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容