2016-08-09 11 views
-1

私は&の詳細を記入して私が使用している場所を取得するフォームを持っていますGoogle Maps。しかし、マップから場所を取得した後に活動に戻ると、すべてのフィールドはnullです。インスタンスを再作成

マップに移動する前に状態を保存し、マップアクティビティから戻った後でその正確な状態を取得するにはどうすればよいですか?

EDIT:フラグメントのの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 iは – rookieDeveloper

答えて

0

@gauravと現在の活動に戻って取得しますonSaveInstanceState()とonRestoreInstanceState()を使用することができます 呼び出しこの作業を非常に簡単に行うことができます。

最初のコールバックでは、保存する状態を保存する必要があります。 と2番目の状態を復元できます。 詳細については、How to use onSaveInstanceState() and onRestoreInstanceState()

+0

が、私はそれらの両方を使用しなければならないの私のコードをアップロードしていますbeforeCreateの前に? – rookieDeveloper

+0

いいえ、それだけのコールバック本体を定義する必要はありません – Alok

+1

また、これらのメソッドはコールバックなので、コールする必要はありません。 – Alok

0

を確認することができます。アクティビティが停止し始めると、システムはonSaveInstanceState()を呼び出して、状態情報をキーと値のペアの集合で保存できるようにします。このメソッドのデフォルト実装では、EditTextウィジェット内のテキストやListViewのスクロール位置など、アクティビティのビュー階層の状態に関する情報が保存されます。

アクティビティの追加の状態情報を保存するには、onSaveInstanceState()を実装し、Bundleオブジェクトにキーと値のペアを追加する必要があります。例えば:あなたの活動状態が

た場合の復元

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); 
} 

:あなたは

onSaveInstanceState(Bundle savedInstanceState) 

をオーバーライドする必要が

は、あなたがこのようなバンドルパラメータに変更するアプリケーションの状態の値を書き込みます以前に破棄された後でアクティビティが再作成された場合、システムがアクティビティをパススルーしたバンドルから保存済みの状態を回復できます。 onCreate()およびonRestoreInstanceState()コールバックメソッドは、インスタンス状態情報を含む同じBundleを受け取ります。

システムがアクティビティの新しいインスタンスを作成しているか、前のアクティビティを再作成しているかにかかわらず、onCreate()メソッドが呼び出されるため、読み込む前に状態バンドルがnullかどうかを確認する必要があります。それがヌルの場合、破壊された以前のものを復元するのではなく、アクティビティーの新しいインスタンスが作成されます。

はたとえば、ここにあなたがの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 
    } 
    ... 
} 
関連する問題