0

私のプログラムには、いくつかのテキストフィールドとカメラインテントを開くボタンがあります。(ページの名前がmainIntentであると仮定します)...ユーザーがテキストフィールドに入力してボタンをクリックしたと仮定します。cameraIntentが開き、ユーザーが写真を撮影します。次に、プログラムでテキストフィールドとボタンのあるページを返します。しかし、私がそうするなら

Intent i = new Intent(cameraIntent.this, mainIntent.class);
startActivity(i);

ユーザーが書いたテキストはすべてなくなりました。return mainIntent私が思うようなものを使う必要があります...

誰かが私を助けることができますか?

4

2 に答える 2

3

onSaveInstanceState(Bundle savedInstanceState)をオーバーライドし、変更するアプリケーション状態の値を次のようにBundleパラメーターに書き込む必要があります。

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  // Save UI state changes to the savedInstanceState.
  // This bundle will be passed to onCreate if the process is
  // killed and restarted.
  savedInstanceState.putBoolean("MyBoolean", true);
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("MyInt", 1);
  savedInstanceState.putString("MyString", "Welcome back to Android");
  // etc.
}

バンドルは基本的にNVP(「名前-値ペア」)マップを格納する方法であり、onCreateおよびonRestoreInstanceStateに渡され、次のように値を抽出します。

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
}

通常、この手法を使用して、アプリケーションのインスタンス値(選択範囲、保存されていないテキストなど)を保存します。

于 2013-01-07T11:57:45.143 に答える
3

最初のアクティビティでstartActivityForResultを使用します。したがって、呼び出しアクティビティに戻ることができます。また、編集テキストのデータが失われることはありません。

Intent i = new Intent(mainIntent.this, cameraIntent.class);
startActivityForResult(i, MY_REQ_CODE);

あなたはこれを追加することができますonActivityResult()

protected void onActivityResult(int requestCode, int resultCode, Intent data)
      {
      switch(requestCode) {
      case MY_REQ_CODE: 
            if (resultCode == RESULT_OK) {
                //Do action that's needed
                break;
            }

      }
}

次のアクティビティでは、次のように電話する必要がありsetResult()ますfinish()。ここで新しいアクティビティを開始する必要はありません。

Intent returnIntent = new Intent();
returnIntent.putExtra("ImageName",imgName);   //Required if you want to pass some data back
setResult(RESULT_OK,returnIntent);        
finish(); 

それが役に立てば幸い。

于 2013-01-07T12:15:16.910 に答える