安卓学习笔记----解决页面翻转信息丢失问题

1. 问题说明

安卓页面翻转之后,Activity实例会被系统消灭然后重新创建,这样就会导致在页面翻转之前所作的操作全部丢失,然后页面内容置回初始的样子,这样会给用户带来非常糟糕的体验。栗子我就不演示了,我想大概大家已经碰到了。

2. 解决办法

可以通过重写onSaveInstanceState()方法,将需要保存的数据存放在Bundle对象中,利用Bundle.putString(“key”,data)的方式存放,然后在onCreate()方法中通过Bundle.getString(“key”,defaultValue);的方法将值取出,进行页面UI渲染。具体的栗子如下:

注:代码中有关日志的使用若不熟练可参考此链接

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private final static String TAG = "MainActivityLog";
    private String changeData = "初始数据";

    private Button mButton;
    private TextView mTextView;

    private void init(){
        mButton = findViewById(R.id.myButton);
        mTextView = findViewById(R.id.myText);
        mTextView.setText(changeData);
        Log.d(TAG,"初始化数据:"+mTextView.getText().toString());
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        if (savedInstanceState != null){//是否是第一次加载
        	//拿回数据
            changeData = savedInstanceState.getString("changeData");
            Log.d(TAG,"获取的数据:"+changeData);
            mTextView.setText(changeData);
        }

        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeData = "改变后的数据";
                mTextView.setText(changeData);
                Log.d(TAG,"改变后的数据:"+mTextView.getText().toString());
            }
        });
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        //存放数据
        savedInstanceState.putString("changeData",changeData);
    }
}
日志输出

在这里插入图片描述

3. 简要说明

onSaveInstanceState()方法通常由系统在onStop()方法之前调用,可以保存基本类型的数据和实现Serializable或Parcelable接口的对象。但是如果是用户点击了返回键,虽然Activity经历的生命周期和屏幕旋转相同,但是系统会理解成,你已经放弃这些数据了,所以此时onSaveInstanceState()方法也回天无术了

发布了34 篇原创文章 · 获赞 65 · 访问量 3714

猜你喜欢

转载自blog.csdn.net/baidu_41860619/article/details/104419483