Bagaimana cara memulai ulang Android Activity
? Saya mencoba yang berikut, tetapi Activity
hanya berhenti.
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
android
android-activity
Samet ÖZTOPRAK
sumber
sumber
Jawaban:
Saya melakukan pengalih tema saya seperti ini:
Pada dasarnya, saya menelepon
finish()
dulu, dan saya menggunakan maksud yang sama persis dengan kegiatan ini dimulai. Tampaknya melakukan triknya?UPDATE: Seperti yang ditunjukkan oleh Ralf di bawah,
Activity.recreate()
adalah cara untuk masuk dalam API 11 dan seterusnya. Ini lebih disukai jika Anda berada di lingkungan API11 +. Anda masih dapat memeriksa versi saat ini dan memanggil snipet kode di atas jika Anda menggunakan API 10 atau lebih rendah. (Tolong jangan lupa untuk mengangkat jawaban Ralf!)sumber
Karena API level 11 (Honeycomb), Anda dapat memanggil metode buat kembali () dari aktivitas (berkat jawaban ini ).
Metode reinate () bertindak seperti perubahan konfigurasi, sehingga metode onSaveInstanceState () dan onRestoreInstanceState () Anda juga dipanggil, jika ada.
sumber
Sebelum SDK 11, cara untuk melakukan ini adalah seperti ini:
sumber
overridePendingTransition(0, 0);
setelahfinish()
danstartActivity()
, masing-masing, bukan di tempat Anda menyebutnya ...Hanya untuk menggabungkan jawaban Ralf dan Ben (termasuk perubahan yang dibuat dalam komentar):
sumber
Saya menggunakan kode ini sehingga saya masih bisa mendukung versi Android yang lebih lama dan menggunakan
recreate()
pada versi Android yang lebih baru.Kode:
Sampel:
sumber
Solusi ini berhasil untuk saya.
Pertama-tama selesaikan aktivitas dan kemudian mulai lagi.
Kode sampel:
sumber
Sejauh ini, ini adalah cara termudah untuk memulai kembali aktivitas saat ini:
sumber
Panggil metode ini
Terima kasih,
sumber
Meskipun ini sudah dijawab berkali-kali.
Jika memulai kembali aktivitas dari sebuah fragmen, saya akan melakukannya seperti ini:
Jadi Anda mungkin berpikir ini sedikit berlebihan? Tetapi
Handler
posting memungkinkan Anda untuk menyebutnya dalam metode siklus hidup. Saya telah menggunakan ini dalamonRestart
/onResume
metode ketika memeriksa apakah keadaan telah berubah antara pengguna kembali ke aplikasi. (menginstal sesuatu).Tanpa
Handler
jika Anda menyebutnya di tempat yang aneh itu hanya akan mematikan aktivitas dan tidak memulai kembali.Jangan ragu untuk bertanya.
Ceria, Chris
sumber
Yah ini tidak terdaftar tetapi kombo dari beberapa yang sudah diposting:
sumber
Dalam hubungannya dengan perilaku siklus hidup SurfaceView yang aneh dengan Kamera . Saya telah menemukan bahwa menciptakan kembali () tidak berperilaku baik dengan siklus hidup SurfaceViews. surfaceDestroyed tidak pernah dipanggil selama siklus rekreasi. Ini disebut setelah onResume (aneh), pada titik mana SurfaceView saya hancur.
Cara asli untuk menciptakan kembali suatu kegiatan berfungsi dengan baik.
Saya tidak tahu persis mengapa ini terjadi, tetapi ini hanya sebuah pengamatan yang mudah-mudahan dapat membimbing orang lain di masa depan karena itu memperbaiki masalah saya yang saya alami dengan SurfaceViews.
sumber
Saya bertanya-tanya mengapa tidak ada yang menyebutkan
Intent.makeRestartActivityTask()
yang dengan bersih membuat tujuan yang tepat ini.Metode ini ditetapkan
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
sebagai flag default.sumber
Sebenarnya kode berikut ini berlaku untuk API level 5 dan lebih tinggi, jadi jika API target Anda lebih rendah dari ini, Anda akan berakhir dengan sesuatu yang sangat mirip dengan kode EboMike.
sumber
Ada satu cara yang bisa digunakan untuk aktivitas apa pun, termasuk yang utama.
Ketika orientasi berubah, Android umumnya akan menciptakan kembali aktivitas Anda (kecuali Anda menimpanya). Metode ini berguna untuk rotasi 180 derajat, ketika Android tidak membuat kembali aktivitas Anda.
sumber
coba gunakan ini ..
sumber
Solusi untuk pertanyaan Anda adalah:
Anda harus menggunakan konteks aktivitas untuk memulai aktivitas baru dan juga untuk menyelesaikan aktivitas saat ini.
Semoga ini bisa membantu..dan bekerja untuk saya.
sumber
Jika Anda menghapus baris terakhir, Anda akan membuat
act
Activity baru , tetapi instance lama Anda akan tetap hidup.Apakah Anda perlu memulai kembali Kegiatan seperti ketika orientasi diubah (yaitu keadaan Anda disimpan dan diteruskan ke
onCreate(Bundle)
)?Jika tidak, satu solusi yang mungkin dilakukan adalah dengan menggunakan satu aktivitas ekstra, dummy, yang akan dimulai dari Aktivitas pertama, dan tugas mana yang memulai contoh baru darinya. Atau hanya menunda panggilan ke
act.finish()
, setelah yang baru dimulai.Jika Anda perlu menyelamatkan sebagian besar negara bagian, Anda berada di perairan yang cukup dalam, karena tidak sepele untuk melewati semua properti negara Anda, terutama tanpa membocorkan Konteks / Aktivitas lama Anda, dengan meneruskannya ke instance baru.
Silakan tentukan apa yang ingin Anda lakukan.
sumber
Inilah cara saya melakukannya.
sumber
Jika Anda menelepon dari beberapa fragmen, lakukan di bawah kode.
sumber
Anda cukup menggunakan
metode sebagai berikut
dan panggilRestart () di mana Anda ingin memulai kembali Aktivitas saat ini
sumber
Panggil metode onCreate. Sebagai contoh
onCreate(null);
sumber