Как настроитьSupportActionBar в представлении, которое расширяет LifecycleActivity

У меня была активность, которая расширила AppCompactActivity, а в методе 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;
    }
}

Я что-то делаю неправильно?

Ответы

Ответ 1

UPDATE 2017-10-05: LifecycleActivity устарел. Если вы используете 26.1.0 или выше support-fragment и appcompat-v7, обе FragmentActivity и AppCompatActivity реализуют LifecycleOwner.

Оригинальный ответ появляется ниже для исторических (и, возможно, истерических) целей.


Цитата документация:

Примечание. Поскольку компоненты архитектуры находятся в альфа-стадии, классы 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;
    }
}