在java中,我们使用方法参数有很多原因,但我从未在我的方法中使用过参数,除非我需要它们
在android中为我想要点击的按钮定义一个方法时,我在Button元素下用XML定义了我的方法
android:onClick="showText"
然后,在我的ProjectName.java文件中,我定义了方法
public void showText(View view){
}
我从不使用View参数..我不需要它。 通过在Stackoverflow上提问,我被告知参数中的View是被点击的视图。 Button是View的子类,TextView也是如此,因此,这种答案有意义。 但我的问题是....这是仅仅onClick方法的规则吗? 另外,为什么我不能将Button作为参数传递?按钮是被点击的实际“视图”,为什么不按钮?
此外,还有其他类似的方法,如果是这样,它们是否都像View参数一样遵循规则,让我们说如果我有一个名为“A”的类,它有一个子类“B”,那么class有一个子类“C”,如果我想使用onClick方法,我只能传递最高类作为参数?
为了简化这一点,是否有任何情况我会将除“View”以外的任何其他内容作为参数传递给这些方法?
谢谢。
答案 0 :(得分:2)
这取决于我们谈论的方法。由于在onClick
级别生成View
事件,因此只能传递View
。但是,您可以轻松地将其转换为Button
,您只需检查它是否为一个。
if (view instanceof Button) Button btn = (Button) view;
在其他情况下,当您向TextWatcher
添加文本更改的侦听器时,您可能还有其他参数,例如EditText
。
答案 1 :(得分:1)
它使用View作为参数类型的原因是因为方法setOnClickListener实际上不是Button类的成员,而是View类的成员(从哪个按钮继承)。
因此,参数类型必须是View,因为它是在该级别定义的。
这也很有用,因为您可能会在几个不同的视图上使用相同的onClick处理程序。任何视图都可以有一个onClick事件。