安卓學習筆記----解決頁面翻轉信息丟失問題

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()方法也迴天無術了

發佈了27 篇原創文章 · 獲贊 49 · 訪問量 2253
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章