Saya bingung ketika harus menyelamatkan negara. Jadi saya tahu yang onSaveInstanceState(Bundle)
dipanggil saat aktivitas akan segera dimusnahkan. Tetapi bagaimana Anda menyimpan informasi Anda di dalamnya dan mengembalikannya ke keadaan semula onCreate(Bundle savedInstanceState)
? Saya tidak mengerti bagaimana bundel ini akan memulihkan informasi. Akan sangat membantu jika seseorang dapat memberikan contoh. Panduan Dev tidak menjelaskan hal ini dengan baik.
public class Conversation extends Activity {
private ProgressDialog progDialog;
int typeBar;
TextView text1;
EditText edit;
Button respond;
private String name;
private String textAtView;
private String savedName;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dorothydialog);
text1 = (TextView)findViewById(R.id.dialog);
edit = (EditText)findViewById(R.id.repsond);
respond = (Button)findViewById(R.id.button01);
if(savedInstanceState != null){
savedInstanceState.get(savedName);
text1.setText(savedName);
}
else{
text1.setText("Hello! What is your name?");
respond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = edit.getText().toString();
text1.setText("Nice to meet you "+ name);
}
});
}
}
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString(savedName, name);
}
}
Jawaban:
Ini
Bundle
adalah wadah untuk semua informasi yang ingin Anda simpan. Anda menggunakan fungsi put * untuk memasukkan data ke dalamnya. Berikut adalah daftar singkat (masih ada lagi) fungsi put yang dapat Anda gunakan untuk menyimpan data diBundle
.Dalam
onCreate
fungsi Anda , iniBundle
dikembalikan ke program. Cara terbaik untuk memeriksa apakah aplikasi sedang dimuat ulang, atau dimulai untuk pertama kali adalah:Untuk mendapatkan data kembali, gunakan fungsi get * seperti fungsi put *. Data disimpan sebagai pasangan nama-nilai. Ini seperti peta hash. Anda memberikan kunci dan nilainya, lalu ketika Anda menginginkan nilainya kembali, Anda memberikan kunci dan fungsi tersebut mendapatkan nilainya. Berikut contoh singkatnya.
Pesan Anda yang disimpan akan dipanggang ke layar. Semoga ini membantu.
sumber
Satu catatan utama yang harus diketahui oleh semua pengembang Android baru adalah bahwa informasi apa pun dalam Widget (TextView, Buttons, dll.) Akan disimpan secara otomatis oleh Android selama Anda menetapkan ID untuk mereka. Artinya, sebagian besar status UI ditangani tanpa masalah. Hanya ketika Anda perlu menyimpan data lain hal ini menjadi masalah.
Dari Android Docs :
sumber
Informasi yang bagus: Anda tidak perlu memeriksa apakah objek Bundle null ke dalam metode onCreate (). Gunakan metode onRestoreInstanceState (), yang dipanggil sistem setelah metode onStart (). Sistem memanggil onRestoreInstanceState () hanya jika ada status tersimpan untuk dipulihkan, jadi Anda tidak perlu memeriksa apakah Bundle bernilai null
sumber
Informasi toko:
Jika Anda tidak ingin memulihkan informasi di onCreate-Method:
Berikut adalah contohnya: Menciptakan kembali Aktivitas
sumber
Pada dasarnya onSaveInstanceState (Bundle outBundle) akan memberi Anda sebuah bundel. Saat Anda melihat kelas Bundle, Anda akan melihat bahwa Anda dapat memasukkan banyak barang berbeda di dalamnya. Pada panggilan onCreate () berikutnya, Anda baru saja mendapatkan Bundle itu kembali sebagai argumen. Kemudian Anda dapat membaca nilai Anda lagi dan memulihkan aktivitas Anda.
Katakanlah Anda memiliki aktivitas dengan EditText. Pengguna menulis beberapa teks di dalamnya. Setelah itu sistem akan memanggil onSaveInstanceState () Anda. Anda membaca teks dari EditText dan menuliskannya ke dalam Bundle melalui Bundle.putString ("edit_text_value", theValue).
Sekarang onCreate dipanggil. Anda memeriksa apakah bundel yang diberikan tidak null. Jika demikian, Anda dapat memulihkan nilai melalui Bundle.getString ("edit_text_value") dan mengembalikannya ke EditText Anda.
sumber
Ini untuk informasi tambahan.
Bayangkan skenario ini
ActivityB meluncurkan ActivityAPrime baru oleh
ActivityAPrime tidak memiliki hubungan dengan ActivityA.
Dalam hal ini Bundle di ActivityAPrime.onCreate () akan menjadi null.
Jika ActivityA dan ActivityAPrime harus merupakan aktivitas yang sama dan bukan aktivitas berbeda, ActivityB harus memanggil finish () daripada menggunakan startActivity ().
sumber
Jika Data Tidak Dimuat Dari
savedInstanceState
gunakan kode berikut.Masalahnya adalah panggilan url tidak sepenuhnya selesai jadi, periksa apakah data dimuat kemudian untuk menampilkan nilai instanceState.
sumber