消防公开课在Activity和多个Fragment之间共享资源
在Activity和多个Fragment之间共享资源
Android Studio 默认⽣成的代码⼀般是这样的:
ssy.lingplayer.playui
import android.os.Bundle
import android.view.LayoutInflater重庆大学宿舍
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProviders
清廉诗词
ssy.lingplayer.R
ssy.lingplayer.SharedViewModel
class PlayUiFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
高铁行李箱尺寸规定savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.play_ui_fragment, container, fal)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
viewModel = ViewModelProviders.of(this).get(SharedViewModel::class.java)
/
/ TODO: U the ViewModel
}
private lateinit var viewModel: SharedViewModel
companion object {
fun newInstance() = PlayUiFragment()
跟女朋友道歉的话
新学期的计划怎么写}
}
关键在于这⼀句
viewModel = ViewModelProviders.of(this).get(SharedViewModel::class.java)
其中ViewModelProviders.of(this)表⽰将viewModel绑定到这个Fragment的⽣命周期(这⾥的this便表⽰当前的Fragment对象)我们可以将this改为activity,即将viewModel绑定到Fangment所在的Activity的⽣命周期上,即努力的名言警句
viewModel = ViewModelProviders.of(activity!!).get(SharedViewModel::class.java)
然后再相应的Activity中绑定SharedViewModel:
override fun onCreate(savedInstanceState: Bundle?) {
tContentView(R.layout.activity_main)
viewModel = ViewModelProviders.of(this).get(SharedViewModel::class.java)
initMediaBrowr()
initView()
}
那么便可在Activity的整个⽣命周期之内和多个Fragment共享资源
原理
ViewModel的⽣命周期依赖于对应的Activity或Fragment的⽣命周期。通常会在Activity第⼀次onCreate()时创建
ViewModel,ViewModel的⽣命周期⼀直持续到Activity最终销毁或Frament最终detached,期间由于屏幕旋转等配置变化引起的Activity销毁重建并不会导致ViewModel重建。借⽤官⽅⽰意图来解释⼀下:
口技教学
这样就可以避免在Activity直接利⽤接⼝进⾏回调