16

miałem Aktywny że przedłużony AppCompactActivity, aw onCreate metody I Setted Toolbar korzystając setSupportActionBar metodę w zwykły sposób:Jak setSupportActionBar w widoku, który rozciąga LifecycleActivity

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

Ale teraz mam komponent ViewModel i aby dzielić dane między fragmentami, które są dziećmi tej aktywności i zarządza cyklami życia, muszę włączyć ten komponent do działania, dlatego też w ten sposób przedłużam 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); 
    } 
} 

Ale zauważyłem, że LifecycleActivity nie ma nic wspólnego z AppCompatActivity ani FragmentActivity robi.

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

    public LifecycleActivity() { 
    } 

    public LifecycleRegistry getLifecycle() { 
     return this.mRegistry; 
    } 
} 

Czy robię coś nie tak?

Odpowiedz

34

AKTUALIZACJA 2017-10-05: LifecycleActivity jest przestarzała. Jeśli używasz 26.1.0 lub wyższej z support-fragment i appcompat-v7, oba FragmentActivity i AppCompatActivity implementują LifecycleOwner.

Oryginalna odpowiedź pojawia się poniżej w celach historycznych (i być może histerycznych).


Cytowanie the documentation:

Uwaga: Ponieważ składniki Architektura jest w fazie alpha, zajęcia fragmentem i AppCompatActivity nie można wdrożyć go (bo nie możemy dodać zależności od stabilnej komponentu niestabilnym API) . Do czasu stabilnego cyklu LifecycleActivity i LifecycleFragment są dostępne dla wygody. Po wydaniu projektu Lifecycles, fragmenty biblioteki wsparcia i działania wdrożą interfejs LifecycleOwner; LifecycleActivity i LifecycleFragment będą w tym czasie przestarzałe.

LifecycleActivity jest przywiązany do FragmentActivity, nie AppCompatActivity.

powinna być w stanie stworzyć swoją własną AppCompatLifecycleActivity następująco:

public class AppCompatLifecycleActivity extends AppCompatActivity implements LifecycleRegistryOwner { 

    private final LifecycleRegistry mRegistry = new LifecycleRegistry(this); 

    @Override 
    public LifecycleRegistry getLifecycle() { 
     return mRegistry; 
    } 
} 
+0

LifecycleRegistry to coś takiego? więc mógłbym stworzyć niestandardowy "LifecycleRegistryOwner" zamiast tworzyć fragmenty rozszerzające LifecycleFragment? (na razie) – alexpfx

+0

@alexpfx: Prawidłowo. Jeszcze raz, cytując [dokumentację] (https://developer.android.com/topic/libraries/architecture/lifecycle.html#implementing-lco): "Każdy niestandardowy fragment lub działanie można przekształcić w LifecycleOwner poprzez implementację zbudowanego -w interfejsie LifecycleRegistryOwner (zamiast rozszerzania LifecycleFragment lub LifecycleActivity). " – CommonsWare

+0

@ superarts.org: Nie widzę, co to ma wspólnego z tym pytaniem, nie mówiąc już o tej odpowiedzi.Zadaj osobne pytanie, gdzie podajesz [mcve] i wyjaśnij bardziej szczegółowo swój problem. – CommonsWare

Powiązane problemy