这更多是出于好奇。我有这个片段:
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
- 引用,它按预期工作。所以它也在 developer.android.com
Buttons
部分中进行了描述。
但是, mView
也可以。
我的问题是,真的需要引用它吗?它背后的目的可能是什么?
为什么它两种方式都有效?任何给定的用法都有任何缺点吗?
感谢。
答案 0 :(得分:1)
为什么它兼顾两种方式?
如果两种方式都有效,那么它可能意味着两种不同的东西。首先,您也将myButton.xml
传递给setContentView
。在这种情况下,作为视图层次结构的一部分,Activity具有标识为mButton
的视图。它按预期工作,但当然,OnClickListener
在膨胀布局的情况下目的较少,除非您将膨胀的视图添加到Activity
的视图层次结构中。如果您未将myButton.xml
传递给setContentView
,则表示您有两个单独的布局,其中包含具有相同ID的相同ImageButton
。在这种情况下,有关OnClickListener
的注意事项也是有效的。
答案 1 :(得分:1)
你有两种情况:
(Button) findViewById(R.id.mButton);
您正在参与活动,其中Activity.findViewById()
将浏览实际的活动视图树。
从您使用setContentView()
,addContentView(..)
或其他inflater方法的那一刻起,此活动就会有一个视图
(Button) mView.findViewById(R.id.mButton);
您正在使用View.findViewById()
在另一个视图中搜索 视图。例如,此方法用于从Fragment获取视图。