我知道类似的问题已经被问到,但这些问题的解决方案都没有为我工作。Android不恢复实例状态
当我继续尝试保存我的应用程序的状态时,EditText视图的状态不会被保存和恢复。我继续和评论的一切了,只是放在一个临时字符串来保存,但是当应用程序加载再升,在onCreate()方法不打印“恢复实例状态”
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));
}
在logcat的输出我得到“保存的实例状态”,然后“onCreate”,但我没有在重新启动应用程序时得到“恢复实例状态”或“onRestore”。
当我进入调试模式时,“onCreate”确实打印到logcat输出。在我的清单中,我有'android:configChanges ='orientation''作为活动的属性。 – jcarrete5
这意味着在方向更改时,onCreate不会被调用,因为您指定要自己处理布局中的更改,并且不需要重置视图。您的onCreate只会在活动开始时被调用,所以它不会在方向更改时调用。这就是为什么你没有看到“恢复实例状态”。 – Kia
onCreate方法可能不会调用方向更改,但这不是我的问题所在。自从我的日志消息Log.v(TAG,“onCreate”)以来,当我重新打开该应用程序时,onCreate方法会被调用;当我重新打开该应用程序时,正在打印该文件。我不确定为什么在我将onSaveInstanceState方法的Bundle中的信息保存到应用程序后重新打开应用程序时Bundle savedInstanceState为null – jcarrete5