안드로이드 개발 질문/답변
(글 수 45,052)
두개의 Activity A,B를 이용해서 app을 작성중입니다.
액티비티 A에서 EditText에 입력한 값을 저장한후, 액티비티 B로 이동한후 다시 A로 돌아왔을때 그값이 그대로 남아있게하려 합니다.
onSaveInstanceState()를 써서 bundle에 값을 저장해놓고, onstart()가 불려지면 다시 setText()를 이용해서 edittext에 쓰려고 합니다.
그러나 onstart에서 저장된 bundle값을 어떻게 불러야 할지 고민입니다.
그리고 startActivityForResult()를 사용하려고 했으나, 액티비티각 자료 전달없이 전환시키고 싶어서 요건 안쓰려고 합니다.
고수님들... 도움 부탁드려요.
액티비티 A에서 EditText에 입력한 값을 저장한후, 액티비티 B로 이동한후 다시 A로 돌아왔을때 그값이 그대로 남아있게하려 합니다.
onSaveInstanceState()를 써서 bundle에 값을 저장해놓고, onstart()가 불려지면 다시 setText()를 이용해서 edittext에 쓰려고 합니다.
그러나 onstart에서 저장된 bundle값을 어떻게 불러야 할지 고민입니다.
그리고 startActivityForResult()를 사용하려고 했으나, 액티비티각 자료 전달없이 전환시키고 싶어서 요건 안쓰려고 합니다.
고수님들... 도움 부탁드려요.
2010.03.04 11:36:50
http://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle) 참고하시길 바랍니다. onSaveInstanceState() 아시니 다른 설명은 필요없겠죠?
2010.03.04 11:40:17
네 저도 onRestoreInstanceState를 보기는 했는데, 이함수는 항상 불려지는게 아니라 강제 종료되었을때만 불려진다고 알고 있습니다.
아닌가요?
2010.03.04 12:02:26
자동적으로 activity의 내용이 저장되고, 복구되기 때문에 문서들 보면서 아 이런게 있구나 하고 넘어갔었는데, 덕분에 문서를 다시 보게 되었습니다. onSaveInstanceState 정상적인 라이프 사이클에서 사용되는게 아니었고, 그렇기 때문에 onRestoreInstanceState도 호출될 때도 있고 아닐 때도 있다고 나와있습니다. 문서에는 사용자 스스로 onPause와 필요한 곳에서 데이터를 저장하고 복구하라고 되어있습니다. Activity의 Saving Persistent State 부분인데 http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState 참고하시길 바랍니다.
2010.03.04 16:32:45
public void loadPreferences() {
SharedPreferences mySharedprefrences = getSharedPreferences(MYPREFS, Activity.MODE_PRIVATE);
String msg = mySharedprefrences.getString("msg", ""); EditText text = (EditText) findViewById(R.id.edit_msg); text.setText(msg.toString()); //Move cursor to the end of text text.setSelection(text.length()); }
public void savePreferences() {
EditText text = (EditText) findViewById(R.id.edit_msg); Editable text2 = text.getText();
SharedPreferences mySharedprefrences = getSharedPreferences(MYPREFS, Activity.MODE_PRIVATE); SharedPreferences.Editor prefEditor = mySharedprefrences.edit(); prefEditor.putString("msg", text2.toString()); prefEditor.commit(); }
저처럼 고민하시는 분들을 위해서 제가 작성한 코드 올려봅니다.