如何在扩展LifecycleActivity的视图中设置SupportActionBar

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-fragmentappcompat-v7,FragmentActivityAppCompatActivity实现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)