2017-08-04 34 views
0

我是新手,目前正在學習java。 在我的MainActivity上打開Fragment後,我想更改Fragment中的視圖。 我注意到我不能像在我的MainActivity中那樣自由選擇使用findViewById(R.id.viewNameInXml)。搜索了一會兒後,我找到了解決方案,以獲得參考查看: 我不得不把FragmentonCreate()方法更改爲以下:Android:片段:爲什麼我只能在onCreateView方法中獲得對視圖的引用?

View inf = inflater.inflate(R.layout.fragment_name, container, false); 
TextView tv = (TextView) 
inf.findViewById(R.id.textViewIdXml); 
zv.setText("new text"); 
return inf; 

我的問題是:我爲什麼只能訪問TextView這樣?請記住,我是初學者,所以儘量保持簡單求你

回答

1

這並不是說你只能在onCreateView中訪問它,而是這個方法是一個方便的地方使用findViewById()並保存對某些視圖的引用。您也可以使用onViewCreated

這兩種方法爲什麼方便訪問視圖? Fragment沒有findViewById方法,所以您需要一個View來調用該方法。在onCreateView中,您已經在擴大視圖層次結構,因此您有一個View;在第二種情況下,視圖層次結構的根視圖作爲方法參數傳遞,因此您再次擁有視圖。

外這兩種方法,你可以通過調用getView()獲得Fragment的根查看,但被警告,這可能取決於當它因爲Fragment生命週期稱爲返回null。 (順便說一下,上面的方法都是生命週期方法。)

+0

謝謝你的回答。現在我明白了爲什麼我不能僅僅調用findViewById。我會在這兩種方法之外的片段中調用「this.getView()」嗎? –

+0

@ Fr4nkWh1te是的,你甚至不需要'this.'。也就是說,通常使用兩種生命週期方法之一來存儲對您計劃稍後操作的視圖的引用,所以這就是我的建議。 – Karakuri

1

爲什麼我只是因爲你還沒有要學習班成員訪問的TextView這樣

晴爪哇:)沒有什麼能阻止你將View inf;移出onCreateView。你只需要在那裏指定它,但一旦完成,你可以在別處使用它。

+0

好吧,我明白了。這有助於我在未來的其他地方訪問該視圖。剩下的唯一問題是,爲什麼我甚至不得不調用findViewById ON「inf」?爲什麼不能像我在主要活動中那樣在另一種方法中編寫TextView tv =(TextView)findViewById(R.id.txtId)? –

+0

我的最後一條評論的問題在第二個答案中得到了解決,所以永遠不要:)謝謝! –

相關問題