在Activity和多个Fragment之间共享资源

Android Studio 默认生成的代码一般是这样的:

package com.messy.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

import com.messy.lingplayer.R

import com.messy.lingplayer.SharedViewModel

class PlayUiFragment : Fragment() {

override fun onCreateView(

inflater: LayoutInflater, container: ViewGroup?,

savedInstanceState: Bundle?

): View? {

return inflater.inflate(R.layout.play_ui_fragment, container, false)

}

override fun onActivityCreated(savedInstanceState: Bundle?) {

super.onActivityCreated(savedInstanceState)

viewModel = ViewModelProviders.of(this).get(SharedViewModel::class.java)

// TODO: Use 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?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

viewModel = ViewModelProviders.of(this).get(SharedViewModel::class.java)

initMediaBrowser()

initView()

}

那么便可在Activity的整个生命周期之内和多个Fragment共享资源

原理

ViewModel的生命周期依赖于对应的Activity或Fragment的生命周期。通常会在Activity第一次onCreate()时创建ViewModel,ViewModel的生命周期一直持续到Activity最终销毁或Frament最终detached,期间由于屏幕旋转等配置变化引起的Activity销毁重建并不会导致ViewModel重建。借用官方示意图来解释一下:

这样就可以避免在Activity直接利用接口进行回调

android4.4 fragment,在Activity和多个Fragment之间共享资源相关推荐

  1. android activity fragment 销毁,activity被销毁而fragment未被销毁视图残留的处理方法

    环境描述:java7+android studio2.2+sdk14 背景描述:目前主流的应用主页一般是一个MainActivity托管几个fragment.我的主页MainActivity继承自Fr ...

  2. Fragment与Activity传递数据

    MainActivity如下: package cc.testsimplefragment0;import android.os.Bundle; import android.app.Activity ...

  3. Fragment与Activity之间的相互通信

    https://blog.csdn.net/u012702547/article/details/49786417 https://blog.csdn.net/carson_ho/article/de ...

  4. Android开发之旅-Fragment和Activity之间onCreateOptionsMenu的联系

    Fragment和Activity一样,可以重写onCreateOptionsMenu方法来设定自己的菜单,其实这两个地方使用onCreateOptionsMenu的目的和效果都是完全一样的,但是由于 ...

  5. Activity 数据传递给Fragment

    下面说的宿主Activity 里面的Fragment 加入现在Fragment 里面 想使用Activity 里面的城市id 方法 1 使用set值 在Fragment 里面写一个set方法 在act ...

  6. android fragment activity 交互,Android基础之Fragment与Activity交互详解

    今天继续讲解Fragment组件的特性,主要是跟Activity的交互和生命周期的关系,我们前面已经说过Fragment是依赖于Activity的,而且生命周期也跟Activity绑定一起.下面我们看 ...

  7. Android开发之Fragment与Activity的数据交互通过回调机制实现(源代码分享)

    上一篇文章简单介绍了Android的回调机制的使用,这一篇博文将重点介绍Fragment碎片与activity的数据交互,fragment在Android开发中起着至关重要的作用,通过官方Androi ...

  8. 什么时候用activity什么时候用fragment

    转载请标明出处:  http://blog.csdn.net/michael1112/article/details/58257035 江东橘子的博客 1. 当你有一个activity,想让这个act ...

  9. Activity与多个fragment的之间的相爱想杀

    踩到这个矿坑:同一个activity管理多个fragment的时候遇到下面的异常 java.lang.IllegalStateException Can not perform this action ...

最新文章

  1. 网络工程师_记录的一些真题_2017下半年上午
  2. Linux(CentOS)安装配置zeromq、jzmq(解决各种问题)
  3. WPF指南之一(WPF的结构)
  4. PostgreSQL数据导出成Insert语句
  5. 收集一些深度学习视频
  6. xml 转map dom4j
  7. 基于android的水稻叶片特征测量系统,基于Android的水稻叶片特征参数测量系统
  8. 夺命雷公狗---ECSHOP---08---商品页的拇改成星星
  9. mysql创建数据库命令
  10. 双系统下Ubuntu安装教程
  11. @EnableWebMvc引发的swagger-ui.html的灾难
  12. Open Language Tools:简介(1)
  13. 利用saopanel系统的UDP转发模式破解校园网
  14. 正则系列1: re.match用法
  15. 学术篇 | 不同需求的认知控制揭示了语义记忆和情景记忆提取共享的神经机制
  16. 桌面计算机休眠快捷键,电脑休眠快捷键是什么
  17. 统计一个字符串中单词的个数(C语言)
  18. 关于鸿蒙开发系统组件的摘抄及运用1
  19. potplayer录制视频包含字幕
  20. WIN10版本安装JDK

热门文章

  1. java 批量读取excel表格内容_java 使用POI批量导入excel数据
  2. 靶机渗透练习84-The Planets:Earth
  3. pyká Unlimited for Mac(项目管理软件)
  4. 实习生与公司签订三方协议的流程与操作细节指南+配图 - CQNU Deloitte
  5. 就业协议书中的服务器是什么,就业协议书是什么?它有什么作用?
  6. 准备启动一个开源项目 - 技术族谱 - 先期利用Goolge云计算平台
  7. arm-linux平台的锐捷认证工具Mentohust移植
  8. 使用python实现科学记数法的书面形式输出
  9. 防止恶意调用API接口
  10. 一文读懂IT行业都有哪些职位