片段中的LiveData观察

时间:2019-07-17 17:59:37

标签: android android-fragments android-architecture-components android-livedata

从2019年开始,我正在尝试遵循最佳做法,从哪里开始观察片段中的LiveData,以及是否应该将thisviewLifecycleOwner作为参数传递给{ {1}}方法。

  • 根据此Google official documentation,我应该在observe()中观察到传递onActivityCreated()(片段)作为参数。

  • 根据此Google sample,我应该在this中观察到传递onViewCreated()作为参数。

  • 根据此I/O video,我不应该使用viewLifecycleOwner,而应该使用this,但是没有指定应该从哪里开始观察。

  • 根据这个陷阱post,我应该在viewLifecycleOwner中观察并使用onActivityCreated()

那么,我应该从哪里开始观察?我应该使用viewLifecycleOwner还是this

3 个答案:

答案 0 :(得分:0)

您是在import { BaseEntity, Column, Entity, Index, JoinColumn, JoinTable, ManyToMany, ManyToOne, OneToMany, OneToOne, PrimaryColumn, PrimaryGeneratedColumn, RelationId } from 'typeorm'; import { Resource } from './resource'; import { Skill } from './skill'; @Entity('resource_skill', { schema: 'cccalpha1' }) export class ResourceSkill { @Column('uuid', { nullable: false, primary: true, default: () => 'uuid_generate_v4()', name: 'id' }) id: string; @ManyToOne(type => Resource, resource => resource.resource_skill, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'resource_id' }) resource: Resource | null; @ManyToOne(type => Skill, skill => skill.resource_skill, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'skill_id' }) skill: Skill | null; } 还是onViewCreated上进行都没关系。片段膨胀时都会调用两者,首先onActivityCreated,然后是onViewCreated。这实际上是一个偏好问题。

onActivityCreated对象使用一个LiveData,并且LifecycleOwnerFragment都实现了该接口,因此您只需要传递Activity

答案 1 :(得分:0)

正如Yigit在I / O谈话中所说,Fragment及其视图具有不同的生命周期。您需要确定您的LiveData是否与片段或其视图相关,然后传递所需的片段。编译器将接受两者,因为两者都是LifecycleOwner

的实现

答案 2 :(得分:0)

如果从活动中观察,则可以在onCreate()上观察,并按here的说明将this用于LifecycleOwner:

  

如果您的生命周期感知组件已与活动的生命周期挂钩,则它将收到ON_CREATE事件。使用@OnLifecycleEvent注释的方法将被调用,以便您的生命周期感知组件可以执行创建状态所需的任何设置代码。

现在,如果您正在片段中进行观察,则可以在onViewCreated()onActivityCreated()上观察到,您应该使用getViewLifecycleOwner(),而here是为什么:

  

获取一个代表片段的View生命周期的LifecycleOwner。在大多数情况下,这反映了Fragment本身的生命周期,但是在分离的Fragments情况下,Fragment的生命周期可能比View本身的生命周期长得多。