Jak wyłączyć wydarzenie onCreate, gdy włączam urządzenie w orientacji pionowej? Ponieważ po uruchomieniu aplikacji większość danych będzie pobierana z Internetu, pobieranie tych danych będzie trudne przy każdym uruchomieniu urządzenia przez użytkownika.Jak wyłączyć działanie Utwórz kiedy zmieni się orientacja?
Odpowiedz
W tagu Aktywny oczywistego zapisu
android: configChanges = "orientacja | Rozmiar ekranu"
przykład:
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize">
W manifeście.xml dodaj android: configChanges = "orientation" dla działania.
Zastosowanie sprawdzenie flagi onCreate. Dokonaj flag = true w momencie inicjalizacji/deklaracja dodać androida: configChanges = „orientacji” w ur pliku manifestu
ur pliku java przesłonić onConfigurationChanged sposób i uczynić Zaznacz jako fałszywe.
Po zrobieniu tego ur na nowo zostanie wywołany, ale kod wspomina w , jeśli nie zostanie wywołany. Przenieś kod ur w stanie , jeśli stanie.
spróbuj tego użyć.
static boolean flag = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if(flag)
Log.d("ONCREATE", "flag is true");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
Log.d("ONCONFIGCHANGE", "CALLED");
flag = false;
super.onConfigurationChanged(newConfig);
}
Alternatywne podejście jest wykorzystanie onSaveInstanceState
sposobu zapisywania danych innych niż trwałe w wiązkę. Stan powinien zostać przywrócony w onRestoreInstanceState
lub w onCreate
. W onCreate
musisz przeanalizować parametr savedInstanceState
, a jeśli nie jest zerowy, powinieneś przywrócić wcześniej zapisany stan.
To rozwiązanie jest zdecydowanie najlepsze. w pliku manifestu dodać
<activity
android:configChanges="keyboardHidden|orientation|screenSize"
android:name="your activity name"
android:label="@string/app_name"
android:screenOrientation="landscape">
</activity
I klasa aktywność dodać następujący kod
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
//do your stuff here
//
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
//do your stuff here
}
}
dla C# Xamarin mam z tego rozwiązania:
using System.Collections.Concurrent;
public static class ObjectExchanger
{
private static ConcurrentDictionary<string, object> ObjectList = new ConcurrentDictionary<string, object>();
/// <summary>
/// Add key and object. Do not add the same key twice.
/// </summary>
/// <param name="key"></param>
/// <param name="obj"></param>
public static void Add(string key, object obj)
{
ObjectList.GetOrAdd(key, obj);
}
/// <summary>
/// Get object via key. Do net Get twice. Key/object will remove after get it once.
/// </summary>
/// <param name="key"></param>
public static object Get(string key)
{
object obj = null;
ObjectList.TryRemove(key, out obj);
return obj;
}
}
można używać w w onCreate Metoda tworzenia kopii zapasowych i przywracania danych dla aktywności po rotacji.
- 1. Wyłączyć działanie konkretnych kontrolek?
- 2. C#: utwórz zdarzenie, gdy zmieni się wartość pola obiektu.
- 3. Jak sprawdzić, kiedy działanie kończy się po przejściu układu?
- 4. wyłączyć działanie w pakiecie administratora sonaty CRUD
- 5. ustawienia Owlcarousel 2 zmieni się po init,
- 6. Jak wyłączyć działanie "przeciągnij, aby odświeżyć" i użyj tylko wskaźnika?
- 7. Aparat nie zastępuje starego obrazu, jeśli zmienia się orientacja
- 8. Jak określić, kiedy kontroler wznowił działanie z tła?
- 9. Co się stanie, jeśli zmieni się obiekt __hash__?
- 10. Orientacja WPF
- 11. Telefon orientacja aparatu Gap
- 12. Kiedy należy wyłączyć executorservice w aplikacji Android
- 13. iOS: orientacja kamery
- 14. Jak określić, które działanie rozpoczyna się po uruchomieniu aplikacji?
- 15. Orientacja uchwytu w systemie Windows 8
- 16. Jak wyłączyć swiperefreshlayout kiedy przesuwając zagnieżdżonego recyclerview za cardview
- 17. Co się stanie, jeśli obiekt zmieni rozmiar własnego kontenera?
- 18. Czy klucz publiczny zmieni się po odnowieniu certyfikatu?
- 19. Wersjonowanie mongoose: kiedy można go bezpiecznie wyłączyć?
- 20. Ikona aplikacji nie zmieni się w symulatorze iPhone'a
- 21. Wyzwalanie zdarzenia, gdy coś się zmieni w klasie
- 22. Orientacja/umieszczenie datepickerów
- 23. orientacja iPad zwraca nieznanych wartości
- 24. Orientacja MPMediaPickerController na iPadzie
- 25. Jak poprawnie szpiegować działanie
- 26. Jak wykryć, kiedy iPhone przechodzi w tryb poziomy za pomocą JavaScript? Czy jest jakieś wydarzenie?
- 27. JPanel nie aktualizuje się, dopóki nie zmieni rozmiaru Jframe
- 28. Określanie, kiedy stringByEvaluatingJavaScriptFromString zakończył się
- 29. Tylko orientacja na iPada
- 30. orientacja osi d3: centrum
Ostrzeżenie: Począwszy od wersji Android 3.2 (poziom interfejsu API 13), "rozmiar ekranu" zmienia się również, gdy urządzenie przełącza się między orientacją pionową i poziomą. Tak więc, jeśli chcesz zapobiec ponownemu uruchomieniu środowiska wykonawczego z powodu zmiany orientacji podczas programowania dla poziomu API 13 lub wyższego (jak zadeklarowały atrybuty minSdkVersion i targetSdkVersion), oprócz wartości "orientacja" musisz uwzględnić wartość "screenSize". Oznacza to, że musisz odcyfrować android: configChanges = "orientation | screenSize". (http://developer.android.com/guide/topics/resources/runtime-changes.html) – Rubix
Przyjemne informacje Rubix. +1 –
Rubix: Co oznacza tutaj orientacja i wartość ScreenSize. Pytanie dotyczy tylko mojej ciekawości. – vgokul129