0
点赞
收藏
分享

微信扫一扫

解决Android jetpack导航组件Navigation返回Fragment重走onCreateView方法刷新视图的问题

编写一个BaseNavigationFragment:

class BaseNavigationFragment : BaseFragment() {
    protected var isNavigationViewInit = false//记录是否已经初始化过一次视图
    private var lastView: View? = null//记录上次创建的view
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        //如果fragment的view已经创建则不再重新创建
        if (lastView == null) {
            lastView = super.onCreateView(inflater, container, savedInstanceState)
        }
        return lastView
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        if(!isNavigationViewInit){//初始化过视图则不再进行view和data初始化
            super.onViewCreated(view, savedInstanceState)
            initView(view)
            initData()
            isNavigationViewInit = true
        }
    }
}

核心思路在上面的注释,即保存上次创建的view,返回上一页再次走onCreateView时直接将其返回,并且在onViewCreated方法中不再进行初始化工作。
leak canary可能会提示lastView内存泄漏,忽略即可。

举报

相关推荐

0 条评论