Modify:增加fragment,activity重建判断,增加fragment重建示例页面。

This commit is contained in:
Dboy
2021-07-08 09:21:58 +08:00
parent 4315057371
commit 298f675029
14 changed files with 357 additions and 3 deletions

View File

@ -7,6 +7,7 @@ import com.alibaba.android.arouter.launcher.ARouter
import com.quyunshuo.androidbaseframemvvm.base.utils.BindingReflex
import com.quyunshuo.androidbaseframemvvm.base.utils.EventBusRegister
import com.quyunshuo.androidbaseframemvvm.base.utils.EventBusUtils
import com.quyunshuo.androidbaseframemvvm.base.utils.ViewRecreateHelper
/**
* Activity基类
@ -20,9 +21,16 @@ abstract class BaseFrameActivity<VB : ViewBinding> : AppCompatActivity(), FrameV
BindingReflex.reflexViewBinding(javaClass, layoutInflater)
}
/**
* activity页面重建帮助类
*/
private var mStatusHelper: ActivityRecreateHelper? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mBinding.root)
//处理保存的装填
mStatusHelper?.onRestoreInstanceStatus(savedInstanceState)
// ARouter 依赖注入
ARouter.getInstance().inject(this)
// 注册EventBus
@ -38,4 +46,22 @@ abstract class BaseFrameActivity<VB : ViewBinding> : AppCompatActivity(), FrameV
)
super.onDestroy()
}
override fun isRecreate(): Boolean = mStatusHelper?.isRecreate ?: false
override fun onSaveInstanceState(outState: Bundle) {
if (mStatusHelper == null) {
//仅当触发重建需要保存状态时创建对象
mStatusHelper = ActivityRecreateHelper(outState)
} else {
mStatusHelper?.onSaveInstanceState(outState)
}
super.onSaveInstanceState(outState)
}
/**
* - activity 重建帮助工具类
*/
private class ActivityRecreateHelper(savedInstanceState: Bundle? = null) : ViewRecreateHelper(savedInstanceState)
}

View File

@ -10,6 +10,7 @@ import com.alibaba.android.arouter.launcher.ARouter
import com.quyunshuo.androidbaseframemvvm.base.utils.BindingReflex
import com.quyunshuo.androidbaseframemvvm.base.utils.EventBusRegister
import com.quyunshuo.androidbaseframemvvm.base.utils.EventBusUtils
import com.quyunshuo.androidbaseframemvvm.base.utils.ViewRecreateHelper
/**
* Fragment基类
@ -23,6 +24,11 @@ abstract class BaseFrameFragment<VB : ViewBinding> : Fragment(), FrameView<VB> {
BindingReflex.reflexViewBinding(javaClass, layoutInflater)
}
/**
* fragment状态保存工具类
*/
private var mStatusHelper: FragmentStatusHelper? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@ -33,6 +39,8 @@ abstract class BaseFrameFragment<VB : ViewBinding> : Fragment(), FrameView<VB> {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//处理恢复
mStatusHelper?.onRestoreInstanceStatus(savedInstanceState)
// ARouter 依赖注入
ARouter.getInstance().inject(this)
// 注册EventBus
@ -42,10 +50,31 @@ abstract class BaseFrameFragment<VB : ViewBinding> : Fragment(), FrameView<VB> {
initRequestData()
}
override fun isRecreate(): Boolean = mStatusHelper?.isRecreate ?: false
/**
* 页面可能重建的时候回执行此方法,进行当前页面状态保存
*/
override fun onSaveInstanceState(outState: Bundle) {
if (mStatusHelper == null) {
//仅当触发重建需要保存状态时创建对象
mStatusHelper = FragmentStatusHelper(outState)
} else {
mStatusHelper?.onSaveInstanceState(outState)
}
super.onSaveInstanceState(outState)
}
override fun onDestroy() {
if (javaClass.isAnnotationPresent(EventBusRegister::class.java)) EventBusUtils.unRegister(
this
)
super.onDestroy()
}
/**
* - fragment状态保存帮助类
* - 暂时没有其他需要保存的--空继承
*/
private class FragmentStatusHelper(savedInstanceState: Bundle? = null) : ViewRecreateHelper(savedInstanceState)
}

View File

@ -20,7 +20,12 @@ interface FrameView<VB : ViewBinding> {
fun initLiveDataObserve()
/**
* 初始化界面创建时的数据请求
* 初始化界面创建时的数据请求,尝试在此方法内调用[isRecreate]进行重建判断,防止数据重复获取
*/
fun initRequestData()
/**
* 页面是否重建fragment被回收重新展示的时候为true系统环境发生变化activity重新创建时为true
*/
fun isRecreate(): Boolean
}

View File

@ -0,0 +1,42 @@
package com.quyunshuo.androidbaseframemvvm.base.utils
import android.os.Bundle
/**
* @author DBoy 2021/7/8
*
* - 文件描述 : 视图activityfragment重建帮助类
*/
open class ViewRecreateHelper(savedInstanceState: Bundle?=null) {
/**
* 重建标记key
*/
private val KEY_RECREATE = "recreate"
/**
* 是否重建
*/
var isRecreate = false
private set
init {
if (savedInstanceState!=null) {
this.onSaveInstanceState(savedInstanceState)
}
}
/**
* 恢复状态
*/
open fun onRestoreInstanceStatus(savedInstanceState: Bundle?) {
isRecreate = savedInstanceState?.getBoolean(KEY_RECREATE) ?: false
}
/**
* 保存状态
*/
open fun onSaveInstanceState(bundle: Bundle) {
bundle.putBoolean(KEY_RECREATE, true)
}
}