17

我有一个扩展 AppCompactActivity 的 Activity,并且在onCreate方法中我以通常的方式设置了ToolbarusingsetSupportActionBar方法:

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组件,并且要在作为此活动的子项的片段之间共享数据并管理生命周期,我必须在 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);
    }
}

但我注意到 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;
    }
}

难道我做错了什么?

4

2 回答 2

38

更新 2017-10-05LifecycleActivity已被弃用。如果您使用and26.1.0或更高版本,则同时使用and实现。support-fragmentappcompat-v7FragmentActivityAppCompatActivityLifecycleOwner

出于历史(可能是歇斯底里)的目的,原始答案出现在下面。


引用文档

注意:由于架构组件处于 alpha 阶段,Fragment 和 AppCompatActivity 类无法实现它(因为我们无法将稳定组件的依赖项添加到不稳定的 API)。在 Lifecycle 稳定之前,提供 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;
    }
}
于 2017-06-20T23:20:21.903 回答
3

最新的支持库修订版 26.1.0将允许您使用AppCompatActivity

Fragment 和 FragmentActivity(AppCompatActivity 的基类)现在从 Architecture Components 实现 LifecycleOwner 接口。

于 2017-09-15T15:52:22.397 回答