简体   繁体   English

Android未还原实例状态

[英]Android not restoring instance state

I know similar questions have been asked but none of the solutions to those questions have been working for me. 我知道有人问过类似的问题,但是这些问题的解决方案都没有对我有用。

When I go ahead and try to save the state of my app, the state of the EditText views are not being saved and restored. 当我继续尝试保存应用程序的状态时,不会保存和还原EditText视图的状态。 I went ahead and commented everything out and just put in a temporary string to save but when the app loads up again, the onCreate() method does not print 'Restoring instance state' 我继续将所有内容注释掉,只是放入一个临时字符串进行保存,但是当应用再次加载时,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));

    }

In the logcat output I get "Saved instance state" and then "onCreate" but I do not get "Restoring instance state" or "onRestore" when restarting the app. 在logcat输出中,我得到“已保存实例状态”,然后得到“ onCreate”,但是在重新启动应用程序时没有得到“恢复实例状态”或“ onRestore”。

You should refer to the key you gave in outState when checking if savedInstanceState is not null, like this. 在检查saveInstanceState是否不为null时,应参考在outState中给定的键,像这样。

            if (savedInstanceState != null) {
            String text = savedInstanceState.getString("test");
            Log.v(TAG, "Restoring instance state");
        }

This documentation may shed some light 本文档可能会有所启发

https://developer.android.com/guide/components/activities/activity-lifecycle.html https://developer.android.com/guide/components/activities/activity-lifecycle.html

Go to debug mode and see if your onCreate is being called. 转到调试模式,查看是否正在调用onCreate。 Do you have android:configChanges set in your manifest? 您的清单中是否设置了android:configChanges?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM