2016-08-09 3 views
-1

나는 &의 위치를 ​​얻기 위해 세부 사항을 채우는 양식을 가지고 있습니다. Google Maps입니다. 그러나지도에서 위치를 얻은 후 활동으로 돌아 가면 모든 필드는 null입니다.인스턴스를 다시 만듭니다

지도로 이동하기 전에 상태를 저장하고지도 활동에서 돌아온 후 정확한 상태를 유지하려면 어떻게해야합니까?

편집 : 조각의에서 onCreate

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    // Here I used recreate but it didn't work 
    // getActivity.recreate(); 

    View view = inflater.inflate(R.layout.fragment_login, container, false); 
    ButterKnife.bind(this, view); 
    return view; 
} 

여기에서 내가 활동을

@OnClick(R.id.frag_expense_lllocation) 
    public void getLocation(){ 
     UiActivity.startMapActivity(context); 
    } 

지도거야하고 ​​선택한 위치

double lat = marker.getPosition().latitude;                
double lng =  marker.getPosition().longitude;                
String position = lat + "," + lng;   
UiActivity.startExpenseActivity(getContext(), position); 
getActivity().finish(); 
+1

.... – RajSharma

+0

@RajSharma은 내가 – rookieDeveloper

답변

0

@gaurav와 현재 활동에 돌아 가야 onSaveInstanceState() 및 onRestoreInstanceState()를 사용할 수 있습니다. 호출 이 작업을 매우 쉽게 수행 할 수 있습니다.

첫 번째 콜백에서는 을 저장하고 상태를 복원 할 수있는 상태를 저장해야합니다. 자세한 내용은 How to use onSaveInstanceState() and onRestoreInstanceState()

+0

내가 그들 모두를 사용해야합니까 내 코드를 업로드 onCreate 전에? – rookieDeveloper

+0

아니요 그냥 콜백 본문을 정의 할 필요가 없습니다. – Alok

+1

또한 이러한 메소드는 콜백이므로 호출 할 필요가 없으며 플랫폼별로 처리 된 모든 것이 콜렉션입니다. – Alok

0

의 응답을 확인할 수 있습니다. 시스템이 onSaveInstanceState()를 호출하여 상태 정보를 키 - 값 쌍 모음으로 저장할 수 있습니다. 이 메소드의 기본 구현은 EditText 위젯의 텍스트 또는 ListView의 스크롤 위치와 같은 활동의 뷰 계층 구조 상태에 대한 정보를 저장합니다.

활동에 대한 추가 상태 정보를 저장하려면 onSaveInstanceState()를 구현하고 키 - 값 쌍을 Bundle 객체에 추가해야합니다. 예를 들어 :

당신은

onSaveInstanceState(Bundle savedInstanceState) 

는이 같은 번들 매개 변수를 변경할 응용 프로그램 상태 값을 기록 재정의해야 :

static final String STATE_SCORE = "playerScore"; 
static final String STATE_LEVEL = "playerLevel"; 
... 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save the user's current game state 
    savedInstanceState.putInt(STATE_SCORE, mCurrentScore); 
    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); 

    // Always call the superclass so it can save the view hierarchy state 
    super.onSaveInstanceState(savedInstanceState); 
} 

당신의 활동 상태 복원

때 이전에 파기 된 활동이 다시 작성되면 시스템이 활동을 전달한 번들에서 저장된 상태를 복구 할 수 있습니다. onCreate() 및 onRestoreInstanceState() 콜백 메서드는 모두 인스턴스 상태 정보가 들어있는 동일한 번들을받습니다.

시스템이 활동의 ​​새 인스턴스를 작성 하든지 이전 활동을 재 작성하는지에 관계없이 onCreate() 메소드가 호출되기 때문에 읽기 전에 상태 번들이 널인지 여부를 확인해야합니다. 그것이 널이면, 시스템은 이전에 파기 된 것을 복원하는 대신에 활동의 새 인스턴스를 작성 중입니다.

예를 들어, 여기에 당신이에서 onCreate()에서 일부 상태 데이터를 복원하는 방법은 다음과 같습니다 코드 포스트

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); // Always call the superclass first 

    // Check whether we're recreating a previously destroyed instance 
    if (savedInstanceState != null) { 
     // Restore value of members from saved state 
     mCurrentScore = savedInstanceState.getInt(STATE_SCORE); 
     mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); 
    } else { 
     // Probably initialize members with default values for a new instance 
    } 
    ... 
} 
관련 문제