我有一个扩展AppCompactActivity的活动,在onCreate
方法中,我以通常的方式使用setSupportActionBar
方法设置了Toolbar
:
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);`
}
}
但是现在我有一个 ViewModel 组件,为了在作为此活动的子级的片段之间共享数据并管理生命周期,我必须在活动中获取此组件,因此我将其扩展为生命周期活动。
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);
}
}
但我注意到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;
}
}
我做错了什么吗?
更新 2017-10-05:LifecycleActivity
已被弃用。如果使用26.1.0
或更高的support-fragment
和appcompat-v7
,则FragmentActivity
和AppCompatActivity
都实现LifecycleOwner
。
出于历史(可能是歇斯底里的(目的,原始答案出现在下面。
引用文档:
注意:由于架构组件处于 alpha 阶段,因此 Fragment 和 AppCompatActivity 类无法实现它(因为我们无法将来自稳定组件的依赖项添加到不稳定的 API(。在生命周期稳定之前,为方便起见,提供了生命周期活动和生命周期片段类。生命周期项目发布后,支持库片段和活动将实现生命周期所有者接口;Lifecycle Activity 和 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;
}
}
最新的支持库修订版26.1.0
将允许您使用AppCompatActivity
Fragment和 FragmentActivity(AppCompatActivity 的基类( 现在从体系结构实现生命周期所有者接口 组件。