2016-05-23 17 views
0

私は2つのアクティビティを持つ単純なアプリケーションをプログラミングしています。私はOptionMenuの項目をクリックしてActivityに切り替えることができます。文字列を保存するには?

今、インスタンスを保存します。私は、アクティビティ1のEditTextに何かを書き、アクティビティ2に変更して再びアクティビティ1に切り替えると、データ(文字列)をEditTextにリストアする必要があります。

どうすればいいですか?

これは、アクティビティの1のコードです:

public class ActivityA extends Activity { 

private String txt1; 
private String txt2; 
private String txt3; 
private String txt4; 

private EditText edText1; 
private EditText edText2; 
private EditText edText3; 
private EditText edText4; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_a); 
    setTitle(R.string.activity1_title); 

    txt1 = "-"; 
    txt2 = "-"; 
    txt3 = "-"; 
    txt4 = "-"; 

    if (savedInstanceState != null){ 
     txt1 = savedInstanceState.getString("Value1"); 
     txt2 = savedInstanceState.getString("Value2"); 
     txt3 = savedInstanceState.getString("Value3"); 
     txt4 = savedInstanceState.getString("Value4"); 
    } 

    edText1 = (EditText) findViewById(R.id.editText); 
    edText1.setText(""+txt1); 

    edText2 = (EditText) findViewById(R.id.editText2); 
    edText2.setText(""+txt2); 

    edText3 = (EditText) findViewById(R.id.editText3); 
    edText3.setText(""+txt3); 

    edText4 = (EditText) findViewById(R.id.editText4); 
    edText4.setText(""+txt4); 
} 

public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putString("Value1",txt1); 
    savedInstanceState.putString("Value2",txt2); 
    savedInstanceState.putString("Value3",txt3); 
    savedInstanceState.putString("Value4",txt4); 

} 

public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    txt1 = savedInstanceState.getString("Value1"); 
    txt2 = savedInstanceState.getString("Value2"); 
    txt3 = savedInstanceState.getString("Value3"); 
    txt4 = savedInstanceState.getString("Value4"); 

} 
} 

問題は、それが文字列を保存していない、と私はなぜ知らないということです。
アイデアはありますか?

+0

http://www.tutorialspot.com/android/android_shared_preferences.htm –

+0

このアイデアは、愚かなことかもしれません - 文字列を保存するためにファイルに書き込むことはできません! –

答えて

1

スーパーコールsuper.onSaveInstanceState(savedInstanceState);がPUT文の後に呼び出されなければなら

public void onSaveInstanceState(Bundle savedInstanceState) { 

    savedInstanceState.putString("Value1",edText1.getText().toString()); 
    savedInstanceState.putString("Value2",edText2.getText().toString()); 
    savedInstanceState.putString("Value3",edText3.getText().toString()); 
    savedInstanceState.putString("Value4",edText4.getText().toString()); 
    super.onSaveInstanceState(savedInstanceState); 
} 


public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    txt1 = savedInstanceState.getString("Value1"); 
    edText1.setText(""+txt1); 
    .... 

} 

追加:

バンドルのキーのための最終的な変数を使用することもかなりいいです。 (多分静的な)

+0

まだ私のために働かない../ –

+0

私の答えを更新しました。あなたがこの値を更新しないので、txt1は " - "です。編集ビューからテキストを取得 – FlanschiFox

+0

私はこれを行った..それでも動作しません! :/ –

1

シンプルなデータの保存と取得のための方法です。最初のアクティビティを終了するときにそれを格納し、ユーザーがアクティビティに戻るときにonCreateにリストアします。

0

あなたはほぼ間違っていました。 スーパーコールの場所を変更するだけで問題が解決するはずです。あなたのコードに基づいて

public void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putString("Value1",txt1); 
    savedInstanceState.putString("Value2",txt2); 
    savedInstanceState.putString("Value3",txt3); 
    savedInstanceState.putString("Value4",txt4); 
    super.onSaveInstanceState(savedInstanceState); // Call at the end 
} 

public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); // Call at the beginning 
    txt1 = savedInstanceState.getString("Value1"); 
    txt2 = savedInstanceState.getString("Value2"); 
    txt3 = savedInstanceState.getString("Value3"); 
    txt4 = savedInstanceState.getString("Value4"); 
} 
+0

'super.onRestoreInstanceState(savedInstanceState);'スーパークラスが最初にバンドルを取得するように最初に呼び出される必要があります。この方法で、あなたは子供がどんなにうんざりしないようにします。 – FlanschiFox

+0

ええ、あなたは正しいです。私は私の答えを更新します。 – perbellinio

+0

まだ私のために働いていない..:/ –

0

、私はあなただけで第二活動から戻ってきた場合、あなたのonRestoreInstanceState関数が呼び出されるとは思いません。代わりにShared Preferencesを使用することをお勧めします。

onRestoreInstanceStateは場合にのみ呼び出されますので:あなたはsavedInstanceState

  • を持って

    1. あなたの活動はシステムによって殺害された、と今ではそれを再作成する必要があります。

    プラス、あなたはすべてのバンドルに保存されます入れた後super.onSaveInstanceState()関数を呼び出す必要があります。

  • 関連する問題