2017-05-08 49 views
0

我無法在onCreate(null)第一次初始化Android應用程序後修改我的佈局視圖,當我最小化應用程序並再次打開它時onCreate(savedInstanceState),我的所有功能像setText似乎並不重要無法在onCreate傳遞時修改視圖savedInstanceState

enter image description here

package com.example.www.i_fucking_hate_java; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.EditText; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (savedInstanceState == null) 
     { 
      // this will work 
      ((EditText) findViewById(R.id.editText)).setText("Good afternoon"); 
      Log.d("Me", "Running 1 " + ((EditText) findViewById(R.id.editText)).getText().toString()); 
     } 
     else 
     { 
      // k so we have an old instance, 
      // problem is now our "handles" to our EditTexts are useless 

      // THIS WILL NOT WORK ?????????????????????????????????????????? 
      // the value returned by getText is correct, but the emulator display 
      // does not change - also I hate android 
      ((EditText) findViewById(R.id.editText)).setText("Good night"); 
      Log.d("Me", "Running 2 " + ((EditText) findViewById(R.id.editText)).getText().toString()); 
     } 

//  // this will work 
//  ((EditText) findViewById(R.id.editText)).setText("Good morning"); 
//  Log.d("Me", "Running 3 " + ((EditText) findViewById(R.id.editText)).getText().toString()); 
    } 
} 

爲什麼卡在「下午好」我的應用程序,而不是顯示「晚安」作爲根據記錄?

+0

嘗試使用[http://stackoverflow.com/questions/16769654/how-to-use-onsaveinstancestate-and-onrestoreinstancestate] – Arjun

回答

2

默認視圖狀態將保存並在onRestoreInstanceState中恢復。作爲onRestoreInstanceState撥打onCreate後,即使您更改了onCreate中的文字,它也會變回onRestoreInstanceState的保存狀態。

你的解決方案是擺脫onCreate視圖恢復onRestoreInstanceState

onRestoreInstanceState會打電話?

這種方法被稱爲在onStart()onPostCreate(束)之間。

當你的活動開始,停止,系統調用 的onSaveInstanceState()方法,讓你的活動可以保存狀態 信息鍵 - 值對的集合。 此方法的默認實現 可保存有關活動視圖層次結構狀態的瞬態信息,例如EditText小部件中的文本或ListView小部件的滾動位置。您的應用程序 應在onSause()方法之後和onStop()之前實施onSaveInstanceState()回調。不要在onPause()中實現此回調 。

欲瞭解更多信息請參見以下方式堆棧Documentation

+0

哪裏文檔說:「在默認視圖狀態將保存和恢復onRestoreInstanceState」 – AlanSTACK

+0

它與LifeCycle(在你的情況activity lifeCycle)如果旋轉改變了活動必須銷燬和重新創建,所有的值將保存在onSaveInstance和恢復onRestoreInstance,您可以從清單文件中更改此行爲。 –

+0

@Alan看到我的編輯和大膽的部分 –

相關問題