2016-05-23 53 views
1

這更多是出於好奇。我有過這樣的片段:Android:使用findViewById時需要引用視圖嗎?

View mView = mInflater.inflate(R.layout.myButton, null); 
ImageButton button = (ImageButton) mView.findViewById(R.id.mButton); 
button.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     ... 

而且一開始我嘗試它沒有mView引用,它按預期工作。所以它也是在Buttons -section 的developer.android.com

然而,mView也適用描述。

我的問題是,真的需要引用它嗎?它背後的目的是什麼?

爲什麼它可以同時工作?任何給定用法都有什麼缺點?

謝謝。

回答

1

爲什麼兩種方式都可以?

,如果它是雙向的,這可能意味着兩個不同的東西。首先你也通過myButton.xmlsetContentView。在這種情況下,活動作爲其視圖層次結構的一部分,具有編號爲mButton的視圖。它按預期工作,但當然,OnClickListener,在膨脹佈局的情況下,目的就更少了,除非將充氣視圖添加到Activity的視圖層次結構中。如果您沒有通過myButton.xmlsetContentView,這意味着您有兩個單獨的佈局,其中包含相同的ID相同的ImageButton。同樣在這種情況下,關於OnClickListener的考慮是有效的。

+0

我真的有兩種不同的佈局,但兩者中包含的id是什麼? – user8

+0

該ID是唯一的。它是在編譯時第一次在佈局中聲明@ + id /時生成的。您可以重複使用您喜歡的方式 – Blackbelt

1

您有兩種情況:

案例1

(Button) findViewById(R.id.mButton); 

你是一個活動,其中Activity.findViewById()將瀏覽的實際活動視圖樹。 此活動將有來自您使用setContentView()addContentView(..)或其他吹氣方法

案例2

(Button) mView.findViewById(R.id.mButton); 

您在尋找一個視圖另一種觀點認爲,使用View.findViewById()的彎矩圖。例如,此方法用於從片段獲取視圖。

+0

是的,我用'addContentView()'使用另一個視圖。 – user8

+1

@ user8看到更新的答案 –

相關問題