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

时间:2017-06-20 23:10:51

标签: android android-activity activity-lifecycle android-architecture-components android-architecture-lifecycle

我有一个扩展AppCompactActivity的Activity,在onCreate方法中,我以通常的方式使用Toolbar方法设置了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);`
    }
}

但是现在我有一个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;
    }
}

我做错了吗?

2 个答案:

答案 0 :(得分:37)

更新2017-10-05 LifecycleActivity已被弃用。如果您使用26.1.0或更高support-fragmentappcompat-v7,则FragmentActivityAppCompatActivity都会实施LifecycleOwner

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

引用the documentation

  

注意:由于体系结构组件处于alpha阶段,因此Fragment和AppCompatActivity类无法实现它(因为我们无法将稳定组件的依赖项添加到不稳定的API)。在生命周期稳定之前,LifecycleActivity和LifecycleFragment类是为了方便而提供的。 Lifecycles项目发布后,支持库片段和活动将实现LifecycleOwner接口; LifecycleActivity和LifecycleFragment将在此时弃用。

LifecycleActivityFragmentActivity绑定,而不是AppCompatActivity

您应该能够创建自己的AppCompatLifecycleActivity,如下所示:

public class AppCompatLifecycleActivity extends AppCompatActivity implements LifecycleRegistryOwner {

    private final LifecycleRegistry mRegistry = new LifecycleRegistry(this);

    @Override
    public LifecycleRegistry getLifecycle() {
        return mRegistry;
    }
}

答案 1 :(得分:3)

The most recent support library revision 26.1.0将允许您使用AppCompatActivity

  

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