Как настроить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;
}
}
Ответ 2
Самая последняя версия библиотеки поддержки 26.1.0
позволит вам использовать AppCompatActivity
Фрагмент и FragmentActivity (базовый класс для AppCompatActivity) теперь реализуем интерфейс LifecycleOwner из архитектуры Компоненты.