1. 程式人生 > >Android 程式執行後,介面不顯示的問題解決辦法

Android 程式執行後,介面不顯示的問題解決辦法

 今天在寫程式碼的時候發現程式執行後,在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的裝置還沒有驗證過。。有沒有試過的朋友說一下。。