我知道類似的問題已經被問到,但這些問題的解決方案都沒有爲我工作。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