1. 程式人生 > >Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding cont

Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding cont

這個Android執行時異常,要求requestWindowFeature方法必須在setContentView載入佈局之前呼叫。

導致錯誤的方法呼叫順序:

public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.tab_choice);
          requestWindowFeature(Window.FEATURE_NO_TITLE);
}
其中:setContentView(R.layout.tab_choice); requestWindowFeature(Window.FEATURE_NO_TITLE);兩行順序換一下就可以了;應該改為:
public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          setContentView(R.layout.tab_choice);
}
再穩妥的做法如下:
public void onCreate(Bundle savedInstanceState) {
         getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
         super.onCreate(savedInstanceState);
         setContentView();
}

       Android java的執行順序有關!目前遇到的這個問題就是因為在系統執行開始的時候就已經呼叫父類的構造方法super.onCreate,接著呼叫setContentView方法載入檢視介面。R.layout.main是R.java資源類中的一個屬性。當你在呼叫這個方法之後在宣告Widget就會報:android.util.AndroidRuntimeException:requestFeature() must be called before adding content

所以前面的那三句中載入Activity的樣式的那句程式碼一定要寫在中間。

       如果方法呼叫的順序沒問題,還是丟擲異常,那可能是你的Activity繼承了ActionBarActivity之後requestFeature就會這樣,大概是因為ActionBarActivity自身給你的content加了個actionbar,然後你再呼叫requestFeature的時候他就已經給加上了,導致這個錯誤,改用繼承Activity就可以了。