2013-06-11 18 views
5

zrobiłem odtwarzacz multimedialny w android to działa świetnie, ale przy zmianie orientacji ekranu, aktywność jest wznowiona Wiem, że to pytanie było już zadawane na StackOverflow kilkakrotnie ale żadna z odpowiedzi pomogło mi. myślę, że powinien używać: onRetainNonConfigurationInstancejak wdrożyć onRetainNonConfigurationInstance

@Override 
public Object onRetainNonConfigurationInstance() { ... } 

ale ja nie wiem jak poprawnie zaimplementować więc jeśli ktoś może mi dać tutorial lub niejawny przykład Byłbym wdzięczny

Odpowiedz

5

wierzę że onRetainNonConfigurationInstance() jest przestarzałe. Pokaże ci on zamiast tego używać Fragments. Here to link do dokumentacji Fragment. Zasadniczo umieścisz swój interfejs użytkownika i dane w niestandardowym Fragment, a następnie użyjesz FragmentManager do przechowywania instancji twojego Fragment. Następnie, gdy aktywność zostanie ponownie uruchomiona, można pobrać numer Fragment i zmienić położenie w razie potrzeby.

+1

Obecnie używam nici oddzielna dla niektórych rzeczy, mogę sobie wyobrazić, że fragmenty nie zrobi tam sprawę. –

3

Nieważne, że jest deprecjonowana, działa dobrze. Najprostszym będzie:

public Object onRetainNonConfigurationInstance() { 
    return this; 
} 

Następnie w YourActivity jest onCreate()

public void onCreate(Bundle savedState) 
{ 
    YourActivity prevActivity = (YourActivity)getLastNonConfigurationInstance(); 
    if(prevActivity!= null) { 
     // So the orientation did change 
     // Restore some field for example 
     this.myValue = prevActivity.myValue; 
    } 
} 
+0

Przykro mi, to może być głupie pytanie, ale powinienem umieścić wszystkie atrybuty, które chcę zapisać na onRetainNonConfigurationInstance() ?????? – AndroidM

+0

Czy powinienem dodać coś do pliku manifestu? – AndroidM

+0

Tak, wszystko, co chcesz zapisać w postaci pojedynczego obiektu. Tak więc, kiedy zwrócisz całe działanie, otrzymasz wszystko z powrotem, ale to może za dużo, może potrzebujesz tylko pola lub dwóch, abyś mógł zwrócić swój własny obiekt MyState. Nie, nie są potrzebne żadne oczywiste zmiany. –

0

nazwie przez system jako część destroyingactivity powodu zmiany konfiguracji, gdy wiadomo, że nowa instancja zostanie natychmiast utworzona dla nowej konfiguracji. Możesz zwrócić dowolny obiekt, który Ci się tu podoba, w tym samą instancję działania, którą później można odzyskać, wywołując getLastNonConfigurationInstance() w nowej instancji działania. Jeśli kierujesz reklamy na numer HONEYCOMB lub nowszy, rozważ zamiast tego użycie Fragment z Fragment.setRetainInstance(boolean).

Przechowywać trzy rzeczy na uwadze podczas korzystania onRetainNonConfigurationInstance(),

  • funkcja zostanie wywołana między OnStop() i onDestroy().
  • Nowa instancja działania zawsze zostanie natychmiast utworzona po wywołaniu tej metody onDestroy(). W szczególności nie będą wysyłane żadne wiadomości w tym czasie (gdy zwracany obiekt nie będzie miał aktywności, z którą ma zostać powiązany).
  • Obiekt, który tu powrócisz, będzie zawsze dostępny z metody getLastNonConfigurationInstance() następującej instancji opisanej poniżej.
  • podczas korzystania AppCompatActivity nie można używać onRetainNonConfigurationInstance() zamiast istnieje alternatywa onRetainCustomNonConfigurationInstance()