Как установить 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 из компонентов архитектуры.