Android 程式執行後,介面不顯示的問題解決辦法
阿新 • • 發佈:2019-01-22
今天在寫程式碼的時候發現程式執行後,在onCreate裡面寫的佈局,一點都沒有顯示出來,專案也沒有報錯,顯示的介面就是一片空白,這是什麼鬼???
剛開始我以為是主題或者 背景顏色的問題,後來都改了,結果程式執行一下還是一片空白,撞邪了???
平時也是在onCreate裡面載入佈局啊,為什麼,這次載入就是載入不出新佈局呢?
後面反思是不是新控制元件的問題,乾脆我把所有的佈局都刪除掉,就載入一個textView,發現還是顯示不出來,在design 的時候,還可以預覽到佈局,但是為啥程式執行後就顯示不出來呢?
後來我又懷疑,是不是Android Studio 出了,問題,執行一下,以前的專案,結果佈局顯示沒有問題, 排除了,軟體的異常
後來仔細檢查了,一下,原來我onCreate裡面呼叫了兩個引數的方法, 結果這個方法,就是不顯示佈局, 以前呼叫的都是一個參的
我把
// @Override // public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { // super.onCreate(savedInstanceState, persistentState); // requestWindowFeature(Window.FEATURE_NO_TITLE); // setContentView(getLayOutID()); // init(); // }
更換成:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayOutID());
}
執行下,發現,佈局顯示了。原來就是這裡出了問題!!!
那上面那個兩個參的是方法是幹什麼的呢,為啥佈局就是不顯示呢?
帶著疑問:原來也有人和我遇到過同樣的問題!
找到了這個部落格: http://blog.csdn.net/sunluyao_/article/details/50395791
下面是解釋:
今天在我寫demo的時候遇到一個問題,當我載入Activity介面的時候,打出onCreate隨手回車,setContentView之後卻始終無法顯示介面,找遍一切可能出錯的地方,最後在這個onCreate方法上面發現了貓膩。系統自動給我提供了這麼一個onCreate()。
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
}
1
2
3
4
第一反應,我並不認識這是一個什麼玩意。開啟陳舊的api文件,也沒有發現PersistableBundle這個類,於是只能求助百度,Google。原來是Api21新加的特性,上一下google,找一下最新api。我們先來看一下PersistableBundle是什麼東西。
A mapping from String values to various types that can be saved to persistent and later restored.
1
顯然,這是一個和Bundle差不多的東西,Bundle我們就比較熟悉了。他兩都是一個鍵值對,前者多了這麼一段話,can be saved to persistent and later restored,可以持久化儲存並且可以恢復。我們再看一下新的onCreate()方法的原始碼。
/**
* Same as {@link #onCreate(android.os.Bundle)} but called for those activities created with
* the attribute {@link android.R.attr#persistableMode} set to
* <code>persistAcrossReboots</code>.
*
* @param savedInstanceState if the activity is being re-initialized after
* previously being shut down then this Bundle contains the data it most
* recently supplied in {@link #onSaveInstanceState}.
* <b><i>Note: Otherwise it is null.</i></b>
* @param persistentState if the activity is being re-initialized after
* previously being shut down or powered off then this Bundle contains the data it most
* recently supplied to outPersistentState in {@link #onSaveInstanceState}.
* <b><i>Note: Otherwise it is null.</i></b>
public void onCreate(@Nullable Bundle savedInstanceState,
@Nullable PersistableBundle persistentState) {
onCreate(savedInstanceState);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
從原始碼中可以看到,依然是呼叫了原始的onCreate()方法,結合以下兩個方法,
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onRestoreInstanceState(savedInstanceState, persistentState);
}
1
2
3
4
5
6
7
8
9
最後記得在配置檔案中註冊當前Activity的時候加上這個屬性,android:persistableMode="persistAcrossReboots",這樣就可以給你的Activity儲存一些持久化資料。當你的手機重啟或者發生其他意外情況的時候,也可以給你的頁面獲取到相關資料。
沒有5.0的裝置還沒有驗證過。。有沒有試過的朋友說一下。。