2011-04-10 26 views
0
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    LayoutInflater inflater = getLayoutInflater(); 
    LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.main, (ViewGroup) findViewById(R.id.root)); 

    Toast toast = new Toast(getApplicationContext()); 
    toast.setView(layout); 
    toast.setDuration(2000); 
    toast.show(); 
} 

此代碼拋出java.lang.IllegalArgumentException:未附加到窗口管理器的視圖。 如果我更改線路查看未附加到窗口管理器

LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.main, (ViewGroup) findViewById(R.id.root)); 

LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.main, null); 

的作品就好了。

有人可以解釋我爲什麼會發生這種情況嗎?我是Android平臺的新手,我只是想了解視圖和窗口管理器的工作原理。 不明白爲什麼如果將根視圖附加到Activity中,則不能再用於Toast視圖。

任何幫助表示讚賞!

謝謝!

+0

看到這個線程的應用程序上下文和活動上下文之間的區別的解釋http://stackoverflow.com/questions/4128589/difference-between-activity-上下文和應用程序上下文 – ccheneson 2011-04-10 16:06:17

+0

,它不回答我的問題。謝謝! – Viorel 2011-04-11 04:00:34

+0

加油!沒有人可以給我一個提示? – Viorel 2011-04-12 11:52:16

回答

2

當您調用inflater.inflate時,根參數是可選的,並且應該是您嘗試膨脹的佈局的父級(例如,當您嘗試爲視圖充氣時列表視圖中的單行,您將列表視圖作爲父項)。

我的猜測是,在你的代碼中,R.layout.main沒有父親?在這種情況下,父母應該是空的。

0

不要將誇大的佈局附加到根目錄。打電話與3個PARAMS膨脹,最後一個錯誤:

LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.main, (ViewGroup) findViewById(R.id.root), false); 
相關問題