livedata lifecycleowner lifecycleobserver extensions arch android android-activity activity-lifecycle android-architecture-components android-architecture-lifecycle

android - lifecycleowner - livedata gradle



Cómo establecerSupportActionBar en una vista que extiende LifecycleActivity (2)

La revisión de la biblioteca de soporte más reciente 26.1.0 le permitirá usar AppCompatActivity

Fragment y FragmentActivity (la clase base para AppCompatActivity) ahora implementan la interfaz LifecycleOwner de los Componentes de Arquitectura.

Tuve una actividad que extendió AppCompactActivity, y en el método onCreate la Toolbar usando el método setSupportActionBar de la forma habitual:

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);` } }

Pero ahora tengo un componente ViewModel y para compartir datos entre fragmentos que son los elementos ViewModel de esta actividad y gestiona los ciclos de vida. Tengo que obtener este componente en la actividad y, por lo tanto, hago que extienda la actividad del ciclo de vida.

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); } }

Pero me di cuenta de que LifecycleActivity no tiene nada que ver con AppCompatActivity ni FragmentActivity.

public class LifecycleActivity extends FragmentActivity implements LifecycleRegistryOwner { private final LifecycleRegistry mRegistry = new LifecycleRegistry(this); public LifecycleActivity() { } public LifecycleRegistry getLifecycle() { return this.mRegistry; } }

¿Estoy haciendo algo mal?


ACTUALIZACIÓN 2017-10-05 : LifecycleActivity ha quedado en desuso. Si usa 26.1.0 o superior de support-fragment y appcompat-v7 , FragmentActivity y AppCompatActivity implementan LifecycleOwner .

La respuesta original aparece a continuación con fines históricos (y posiblemente histéricos).

Citando la documentación :

Nota: como los componentes de la arquitectura están en fase alfa, las clases Fragment y AppCompatActivity no pueden implementarlo (porque no podemos agregar una dependencia de un componente estable a una API inestable). Hasta que Lifecycle sea estable, las clases LifecycleActivity y LifecycleFragment se proporcionan para su comodidad. Después de que se lance el proyecto Lifecycles, los fragmentos y las actividades de la biblioteca de soporte implementarán la interfaz LifecycleOwner; LifecycleActivity y LifecycleFragment quedarán en desuso en ese momento.

LifecycleActivity está vinculado a FragmentActivity , no a AppCompatActivity .

Debería poder crear su propia AppCompatLifecycleActivity siguiente manera:

public class AppCompatLifecycleActivity extends AppCompatActivity implements LifecycleRegistryOwner { private final LifecycleRegistry mRegistry = new LifecycleRegistry(this); @Override public LifecycleRegistry getLifecycle() { return mRegistry; } }