Androidスタジオの使用方法を学習していて、自分のアクティビティの状態を保存しようとしています。 onSaveInstanceStateメソッドで何か問題があります。コードを実行すると、savedInstanceStateは常にnullになるからです。問題を解決するにはどうすればよいですか?私は何時間も試してきましたが、何が間違っているのか分かりません。ここにmainActivityファイルに関連するものがあります。アクティビティの状態を正しく保存して復元する方法は?
public class MainActivity extends AppCompatActivity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
static final String LAST_MESSAGE = "com.example.myfirstapp.LAST_MESSAGE";
String message, displayMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
System.out.println("Restoring");
System.out.println(savedInstanceState);
if (savedInstanceState != null) {
displayMessage = "Last Saved Message: " + savedInstanceState.getString(LAST_MESSAGE);
}
else {
displayMessage = "No Messages Saved!";
}
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, displayMessage, Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putString(LAST_MESSAGE, message);
super.onSaveInstanceState(savedInstanceState);
}
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
「savedInstanceState」はどのようにあると思いますか?そのアクティビティで 'startActivity'を実行すると、そのアクティビティは保存されません。画面を回転させてみましたか? –
'onSaveInstanceState'メソッドがどのようにトリガされるかについては、[この図](https://developer.android.com/images/fundamentals/restore_instance.png)を参照してください。 –
コード内のデータは、画面を回転するときにのみ保存されます。シンプルなデータを保存したい場合は、Sharedpreferenceを使用するか、大きなデータを保存するとデータベース(例:SQLite、Realm ...)で保存できます。 –