私は同様の質問がされていることは知っていますが、それらの質問に対する解決策はどれも私のために働いていません。Androidがインスタンスの状態を復元していない
私のアプリの状態を保存しようとすると、EditTextビューの状態は保存されず復元されません。私は先に行って、すべてをコメントアウトし、ちょうど保存するために一時的な文字列を入れますが、アプリケーションの負荷がアップし、再び、のonCreate()メソッドは、私が手logcat出力で
package com.fwumdesoft.udppacketsender;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* Posts a UDP message with the given data to the
* target address on the target port.
*/
class UdpPostActivity extends AppCompatActivity {
private static final String TAG = "UdpPostActivity";
private static final String stateTextTargetHost = "com.fwumdesoft#TargetHost";
private static final String stateTextTargetPort = "com.fwumdesoft#TargetPort";
private static final String stateTextHexData = "com.fwumdesoft#HexData";
private static final String stateTextStringData = "com.fwumdesoft#StringData";
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.v(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_udp_post);
if (savedInstanceState != null) {
// ((EditText) findViewById(R.id.txtAddress)).setText(savedInstanceState.getString(stateTextTargetHost));
// ((EditText) findViewById(R.id.txtPort)).setText(savedInstanceState.getString(stateTextTargetPort));
// ((EditText) findViewById(R.id.txtData)).setText(savedInstanceState.getString(stateTextHexData));
// ((EditText) findViewById(R.id.txtStringData)).setText(savedInstanceState.getString(stateTextStringData));
String text = savedInstanceState.getString(stateTextStringData);
Log.v(TAG, "Restoring instance state");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// outState.putString(stateTextTargetHost, ((EditText)findViewById(R.id.txtAddress)).getText().toString());
// outState.putString(stateTextTargetPort, ((EditText)findViewById(R.id.txtPort)).getText().toString());
// outState.putString(stateTextHexData, ((EditText)findViewById(R.id.txtData)).getText().toString());
// outState.putString(stateTextStringData, ((EditText)findViewById(R.id.txtStringData)).getText().toString());
super.onSaveInstanceState(outState);
outState.putString(stateTextStringData, "test");
Log.v(TAG, "Saved instance state");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.v(TAG, "onRestore");
// ((EditText)findViewById(R.id.txtAddress)).setText(savedInstanceState.getString(stateTextTargetHost));
// ((EditText)findViewById(R.id.txtPort)).setText(savedInstanceState.getString(stateTextTargetPort));
// ((EditText)findViewById(R.id.txtData)).setText(savedInstanceState.getString(stateTextHexData));
// ((EditText)findViewById(R.id.txtStringData)).setText(savedInstanceState.getString(stateTextStringData));
}
「インスタンスの状態を復元する」印刷しないとき"保存されたインスタンスの状態"と "onCreate"しかし、私はアプリケーションを再起動すると、 "インスタンスの状態を復元する"または "onRestore"を取得しません。
デバッグモードに入ると、 "onCreate"がlogcat出力に出力されます。私のマニフェストでは、私は 'android:configChanges = "orientation"をアクティビティの属性として持っています。 – jcarrete5
これは、オリエンテーションの変更を意味するので、レイアウトの変更を自分で処理し、ビューをリセットする必要はないと指定するので、onCreateは呼び出されません。あなたのonCreateはアクティビティの開始時にのみ呼び出されるため、オリエンテーションの変更で呼び出されることはありません。そのため、「インスタンス状態の復元」は表示されません。 – Kia
onCreateメソッドは方向変更に呼び出されないかもしれませんが、それは私の問題ではありません。アプリケーションを再び開くと、ログメッセージ 'Log.v(TAG、" onCreate ");が表示されているので、onCreateメソッドが呼び出されています。 onSaveInstanceStateメソッドのバンドルに情報を保存したときに、アプリケーションを再度開いた後にBundle savedInstanceStateがnullであることがわかりません。 – jcarrete5