如何在扩展生命周期活动的视图中设置支持操作栏



我有一个扩展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-05LifecycleActivity已被弃用。如果使用26.1.0或更高的support-fragmentappcompat-v7,则FragmentActivityAppCompatActivity都实现LifecycleOwner

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


引用文档:

注意:由于架构组件处于 alpha 阶段,因此 Fragment 和 AppCompatActivity 类无法实现它(因为我们无法将来自稳定组件的依赖项添加到不稳定的 API(。在生命周期稳定之前,为方便起见,提供了生命周期活动和生命周期片段类。生命周期项目发布后,支持库片段和活动将实现生命周期所有者接口;Lifecycle Activity 和 LifecycleFragment 届时将被弃用。

LifecycleActivityFragmentActivity有关,而不是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 的基类( 现在从体系结构实现生命周期所有者接口 组件。

最新更新