2012-08-11 5 views
3

activity1 및 activity2의 두 가지 활동이 있다고 가정합니다. activity1에서 activity2로 이동하고 activity2에서 일부 정보를 가져 와서 다시 activity1에 삽입하고 싶습니다. 또한 이전 상태로 놓치지 않고 이전 activity1을 잃고 싶습니다. 어떻게 상태를 저장할 수 있습니까?onResume 및 onPause를 사용하는 경우

답변

0

당신은 onSaveInstanceState(Bundle savedInstanceState)

이 예제 코드

또는 SharedPreferences를 사용하기위한 this 답을 확인하시기 바랍니다 오버라이드 (override) 할 필요가 있습니다. this 코드

2

onSaveInstanceState(Bundle)activity1에 덮어 원하는 데이터를 저장 한 다음 동일한 활동에 onRestoreInstanceState(Bundle)을 다시 적용하여 값을 다시 가져옵니다. Bundle을 사용하면 원하는 모든 데이터를 저장할 수 있습니다. 다음과 같이 추천합니다 :

public class MainActivity extends Activity { 
    ... 
    public static final String DATA1_KEY = "data1"; 

    private boolean value1; 
    ... 

    @Override 
    protected void onSaveInstanceState (Bundle outState) { 
     outState.putBoolean(DATA1_KEY, value1); 
    } 

    @Override 
    protected void onRestoreInstanceState (Bundle savedInstanceState) { 
     value1 = savedInstanceState.getBoolean(DATA1_KEY); 
    } 
} 
0

런타임에만 데이터를 보존하려면 정적 멤버를 사용하는 것이 좋습니다. 그런 다음 모든 활동에서이 구성원을 액세스하고 조작 할 수 있습니다. 예를 들면 :

public class FirstActivity extends Activity 
{ 
    public static String data = null; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(...); 
     data = "This is a test!"; 
    } 
} 

두 번째 활동에서 당신은 당신이 안전하고 더 우아하게 게터/세터 기능을 추가 할 수 있습니다 물론

public class SecondActivity extends Activity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(...); 
     if(FirstActivity.data!=null) 
     { 
      //You can use it: 
      System.out.println(FirstActivity.data); 
     } 
    } 
} 

처럼이 정적 변수에 액세스 할 수 있습니다.

  • SharedPreferences
  • SQLite
  • 또는 온라인 데이터베이스에 데이터를 저장 : 당신이 더 긴 시간을 저장하려면

    의 사용을 고려하시기 바랍니다. 당신이 설명하는 것을

4

Activity.startActivityForResult() 방법을 사용하는 완벽한 고전 이유입니다.

실행이 완료되면 당신은 결과를하고자하는 활동을 :

구글이 방법 설명서에 쓴이

. 이 활동 종료가, 당신의 onActivityResult를() 메소드가 주어진 requestCode가

그래서

당신이해야 할 것은 호출 될 때 : 결과에 대한 당신의 activity1에 시작 활동에서, 그리고 activity2에에서 원하는 데이터로 setResult(int resultCode, Intent data) 방법을 사용 당신의 활동 1 돌아가, 그리고 finish() (그것은 동일한 상태에서 다시 onActivityResult()로 돌아갈 것입니다 activity1 전에했다 ..).

0

사용자가 새로운 활동을 시작하는 작업을 앱에서 수행합니다. 현재 활동은 두 번째 활동이 작성 될 때 중지됩니다. 그런 다음 사용자가 뒤로 단추를 누르면 첫 번째 활동이 다시 시작됩니다.

활동이 중지되면 활동 객체는 메모리에 상주하고 활동이 재개 될 때 호출됩니다.Resumed 상태에 이르는 콜백 메소드 중 생성 된 구성 요소를 다시 초기화 할 필요가 없습니다. 또한 시스템은 레이아웃의 각보기에 대한 현재 상태를 추적하므로 사용자가 EditText 위젯에 텍스트를 입력하면 해당 내용이 보존되어 저장 및 복원 할 필요가 없습니다.

:이 멈췄 동안 시스템이 활동을 파괴하더라도, 그것은 여전히보기 번들 (키 - 값 쌍의 BLOB)에서 (예 : 글고에서 텍스트) 객체 및 복원의 상태를 유지 사용자가 활동의 동일한 인스턴스로 다시 탐색하는 경우
CommonsWare는 here 메시지 : 사용자가 활동을 마친 을 나타낸 것처럼

사용자 "를 눌러 이전 버튼"다음 에서 번들 onSaveInstanceState()가 (존재하는 경우), 삭제되는 경우. onSaveInstanceState() 번들은 사용자가 활동 (예 : 들어오는 전화 통화 허용)을 마치고 로 끝났다고 말하지 않은 경우에 사용됩니다. Android 은 RAM을 확보하기 위해 활동을 파괴하도록 선택합니다. 이상이 라이프 사이클 콜백의 일부가 아니므로 onSaveInstanceState (번들)의 대신 ) onPause (에 영구 데이터를 저장하는 것이 중요하다

하는 것으로, 이렇게 것이다 :

그리고 문서

말한다 설명서에 설명 된대로 과 같은 모든 상황에서 호출해서는 안됩니다. 즉

, onPause()와 onResume() 대신 onSaveInstanceState (번들)와 onRestoreInstanceState (번들)에 비 개체보기 위해 저장/복원 코드를 삽입. 마지막으로 나는 상태를 저장할 필요가 없다. 만약 뷰 객체가이고 다른 상태가 있다면 preferences, file 또는 sqliteonPause()에 저장하고 onResume()에 저장하면된다.

당신은이 페이지에서 자세한 내용을 볼 수 있습니다
Stopping and Restarting an Activity
Saving Activity state in Android
Android wont save the current state of an activity

+0

@ user1576427 내 편집을 참조하십시오. – hasanghaforian

관련 문제