ale*_*pfx 17 android activity-lifecycle android-activity android-architecture-lifecycle android-architecture-components
我有一个扩展AppCompactActivity的Activity,在onCreate方法中我以通常的方式设置了Toolbarusing setSupportActionBar方法:
public class StepMasterActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_step_master);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);`
}
}
Run Code Online (Sandbox Code Playgroud)
但是现在我有一个ViewModel组件,并在作为此活动的子代的片段之间共享数据并管理生命周期,我必须在Activity中获取此组件,因此我将其扩展为LifecycleActivity.
public class StepMasterActivity extends LifecycleActivity {
@Override
public class StepMasterActivity extends LifecycleActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_step_master);
// setToolbar();
SharedViewModel sharedViewModel = ViewModelProviders.of(this).get(SharedViewModel.class);
}
}
Run Code Online (Sandbox Code Playgroud)
但我注意到LifecycleActivity与AppCompatActivity无关,而FragmentActivity也没有.
public class LifecycleActivity extends FragmentActivity implements LifecycleRegistryOwner {
private final LifecycleRegistry mRegistry = new LifecycleRegistry(this);
public LifecycleActivity() {
}
public LifecycleRegistry getLifecycle() {
return this.mRegistry;
}
}
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
Com*_*are 37
更新2017-10-05:LifecycleActivity已被弃用.如果你使用26.1.0或更高的support-fragment和appcompat-v7,FragmentActivity并AppCompatActivity实现LifecycleOwner.
原始答案出现在历史(可能是歇斯底里)的目的下面.
引用文档:
注意:由于体系结构组件处于alpha阶段,因此Fragment和AppCompatActivity类无法实现它(因为我们无法将稳定组件的依赖关系添加到不稳定的API).在生命周期稳定之前,LifecycleActivity和LifecycleFragment类是为了方便而提供的.Lifecycles项目发布后,支持库片段和活动将实现LifecycleOwner接口; LifecycleActivity和LifecycleFragment将在此时弃用.
LifecycleActivity是和FragmentActivity,而不是AppCompatActivity.
您应该能够创建自己的AppCompatLifecycleActivity,如下所示:
public class AppCompatLifecycleActivity extends AppCompatActivity implements LifecycleRegistryOwner {
private final LifecycleRegistry mRegistry = new LifecycleRegistry(this);
@Override
public LifecycleRegistry getLifecycle() {
return mRegistry;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2343 次 |
| 最近记录: |