Как установить 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;
}
}
Я делаю что-то неправильно?
2 ответа
ОБНОВЛЕНИЕ 2017-10-05: LifecycleActivity
был объявлен устаревшим Если вы используете 26.1.0
или выше support-fragment
а также appcompat-v7
, и то и другое FragmentActivity
а также AppCompatActivity
воплощать в жизнь LifecycleOwner
,
Оригинальный ответ приведен ниже для исторических (и, возможно, истеричных) целей.
Цитирование документации:
Примечание. Поскольку компоненты архитектуры находятся на стадии альфа, классы Fragment и AppCompatActivity не могут ее реализовать (поскольку мы не можем добавить зависимость от стабильного компонента к нестабильному API). До тех пор, пока жизненный цикл не станет стабильным, для удобства предусмотрены классы LifecycleActivity и LifecycleFragment. После того, как проект "Жизненные циклы" будет выпущен, фрагменты библиотеки поддержки и действия будут реализовывать интерфейс 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;
}
}
Самая последняя версия библиотеки поддержки 26.1.0
позволит вам использовать AppCompatActivity
Fragment и FragmentActivity (базовый класс для AppCompatActivity) теперь реализуют интерфейс LifecycleOwner из компонентов архитектуры.