示例描述:要求FragmentA发送出数据,FragmentB和Activity都能接收到。FragmentB发送出的数据FragmentA和Activity都能接收到。Activity发送出去的数据FragmentA和FragmentB都能接收到。 上代码: SharedDataActivity.kt用于承载两个Fragment以及自己数据的Activity /** * Activity和Fragment,Fragment和Fragment之间共享数据*/classS...
将ViewModel注入Fragment的过程可以通过以下步骤完成: 首先,在项目的build.gradle文件中添加Dagger 2的依赖项。例如: 代码语言:txt 复制 implementation 'com.google.dagger:dagger:2.x' annotationProcessor 'com.google.dagger:dagger-compiler:2.x' 创建一个Module类,用于提供ViewModel的实例。在该类中,使用@Provides...
在子Fragment 中,我们将观察父 Fragment 共享的 ViewModel 数据。 classChildFragment:Fragment(){privatelateinitvarviewModel:SharedViewModeloverridefunonCreateView(inflater:LayoutInflater,container:ViewGroup?,savedInstanceState:Bundle?):View?{returninflater.inflate(R.layout.fragment_child,container,false)}overridefun...
Fragment 示例 importandroid.os.Bundleimportandroid.view.LayoutInflaterimportandroid.view.Viewimportandroid.view.ViewGroupimportandroidx.fragment.app.Fragmentimportandroidx.fragment.app.activityViewModelsclassSampleFragment:Fragment(){privatevalsharedViewModel:SharedViewModelbyactivityViewModels()overridefunonCreateView...
是通过LiveData和观察者模式来实现。LiveData是一种可观察的数据持有类,它可以感知生命周期并在数据发生变化时通知观察者。以下是一种良好的实践方式: 创建一个ViewModel类,该类负责处理数据逻辑和业务逻辑,并将需要与Fragment通信的数据封装在LiveData对象中。
Fragment可以看作是Activity的子页面,即,一个Activity中可以包含多个Fragment,这些Fragment彼此独立,但是又都属于同一个Activity。 基于这些组件的特性,我们可以巧妙地利用ViewModel和LiveData,实现同一个Activity中的不同Fragment间通信。 ViewModel+LiveData实现Fragment间通信 ...
在第一版实现中使用到了基于注解的方式去标记作用域,再通过反射注入对象的方式实现,这种方式不仅效率低使用也不太灵活,有个很大的弊端无法使用自定义ViewModelFactory。 所以在第二版优化中将抛弃注解反射的方式,实现灵感来源于fragment-ktx中的viewModles()扩展方法。由第一版中所讲到的共享原理可知我们只需要保证从同...
使用Fragment ViewModel的步骤如下: 1.首先,确保在项目的gradle文件中添加了`implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"`的依赖。 2.在Fragment中创建一个继承自`ViewModel`的子类,并在该类中定义需要共享和保留的数据。例如: ```kotlin import androidx.lifecycle.ViewModel class MyViewModel...
在Fragment中初始化ViewModel对象的方法有两种:一种是使用Kotlin的委托属性(by lazy),另一种是在Fragment的onCreate方法中直接实例化ViewModel对象。 使用Kotlin的委托属性的方法如下: ```kotlin class MyViewModel : ViewModel() { //在这里定义需要保存的数据 private val myData: MutableLiveData<String> = Mutable...
页面(Activity/Fragment)只负责UI的展示,数据的处理由专门的类去实现,而这个就是我们ViewModel的由来。ViewModel可以这么理解: 它是介于View(视图)和Model(数据模型)之间的一个东西。它起到了桥梁的作用,使视图和数据既能分离,也能保持通信。即ViewModel 是以生命周期的方式存储与管理UI相关数据。ViewModel的作用 在...