Android 如何在LifecycleObserver中获取LifecycleOwner?
我需要让LifecycleObserver中的LifecycleOwner将其传递给ViewModel observer 这是我的主要活动,我添加了LifecycleObserverAndroid 如何在LifecycleObserver中获取LifecycleOwner?,android,android-lifecycle,android-architecture-components,Android,Android Lifecycle,Android Architecture Components,我需要让LifecycleObserver中的LifecycleOwner将其传递给ViewModel observer 这是我的主要活动,我添加了LifecycleObserver public class MainActivity extends AppCompatActivity implements LifecycleOwner{ private LifecycleRegistry mLifecycleRegistry; @Override protecte
public class MainActivity extends AppCompatActivity implements LifecycleOwner{
private LifecycleRegistry mLifecycleRegistry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, MainFragment.newInstance())
.commitNow();
}
mLifecycleRegistry=new LifecycleRegistry(this);
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
getLifecycle().addObserver(new MyLifecycleObserver());
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
这是我的观察者,我需要生命周期所有者
public class MyLifecycleObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStartListener(){
FirebaseMassage.startFirebase();
MainFragment.massageViewModel.getMassage().observe(/*here I need the LifecycleOwner*/, textMassage -> {
FirebaseMassage.updateFirebaseMassage(textMassage);
});
}
}
您不需要实现自己的LifecycleRegistry,只需使用AppCompativeActivity提供的LifecycleRegistry即可
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, MainFragment.newInstance())
.commitNow();
}
getLifecycle().addObserver(new MyLifecycleObserver());
}
}
如果将startFirebase调用和viewmodel observer分开,则可以直接在片段中观察viewmodel的更改,即
MyLifecycleObserver在发出ON_START时启动firebase调用
public class MyLifecycleObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStartListener(){
FirebaseMassage.startFirebase();
}
}
MainFragment直接观察ViewModel
public class MainFragment extends Fragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
massageViewModel.getMassage().observe(this, textMassage -> {
FirebaseMassage.updateFirebaseMassage(textMassage);
});
}
您只需使用另一个签名即可获得
LifecycleOwner
,如:
public class MyLifecycleObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStartListener(LifecycleOwner owner){
...
}
}
观察者方法可以接收零个或一个参数。如果使用(意味着您也可以使用零参数,但使用了IFF参数),则第一个参数必须是LifecycleOwner类型。使用Lifecycle.Event.ON注释的方法任何都可以接收第二个参数,该参数的类型必须为Lifecycle.Event
class TestObserver implements LifecycleObserver {
@OnLifecycleEvent(ON_CREATE)
void onCreated(LifecycleOwner source) {
//one argument possible
}
@OnLifecycleEvent(ON_START)
void onCreated() {
//no argument possible
}
@OnLifecycleEvent(ON_ANY)
void onAny(LifecycleOwner source, Event event) {
//two argument possible only for ON_ANY event
}
}
阿披舍克·库马尔回答的官方文件来源于此: 以下是文件本身:
观察者方法可以接收零个或一个参数。如果使用,第一个参数的类型必须为
LifecycleOwner
使用Lifecycle.Event.ON注释的方法\u上的任何
都可以接收第二个参数,该参数的类型必须为Lifecycle.Event
类TestObserver实现LifecycleObserver{
@OnliFeCycleeEvent(在创建时)
已创建void(LifecycleOwner源){}
@仅限iFeCycleeEvent(在任何情况下)
void onAny(LifecycleOwner源,事件){}
}
您能提供一个记录此内容的链接吗?@Pallguer谢谢。我特别寻找LifecycleOwner可以作为参数选择性地传递给OnLifecycleEvent注释的函数的文档。有文件记录吗?