为什么视图的操作(在这种情况下为Button)必须将View作为参数?

时间:2013-11-12 23:30:16

标签: java android methods parameters

我是Android开发的新手,但不是Java。

我不明白为什么我在Button中定义的方法必须将View作为参数。

例如......

XML中的

<Button
        android:id="@+id/button1"
        //etc..
        //etc..
        android:onClick="displayText" /> 

可以看出,这是onClick方法。 当我编写Java代码时,方法displayText将被定义为

public void displayText(View view){
        TextView myTextView = (TextView)findViewById(R.id.textView1);
        myTextView.setVisibility(View.VISIBLE);
    }

当一切正常时,我最初隐藏的文字将通过简单的按钮显示。

当我从此方法中删除参数View view时,当我尝试点击按钮时应用程序崩溃。

我不明白为什么。

我不一定要对参数中的view做任何事情。 在非android开发中,我可以使用参数中的view并对其进行操作..但我没有看到我正在做任何有关此参数的事情..所以为什么这个方法需要它?

3 个答案:

答案 0 :(得分:2)

潜在地,可以使用相同的方法来处理多个视图的click事件。 View view参数可以让您知道哪一个是事件的来源。即单击了哪个按钮。

它需要它的原因是因为它必须匹配接口。当尝试将XML中的函数名称与可用函数匹配时,找不到它。

答案 1 :(得分:1)

Button是View的子类。因此,当方法采用View时,这意味着它们可以获取Button作为输入,还可以获得View的其他子类。

视图在参数中给出,因此您可以修改单击的视图。

顺便说一句,我不知道你可以像这样实现点击监听器。我通常这样做:

button.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View view){
        // handle
    }
});

答案 2 :(得分:0)

我搜索过Stackoverflow,但从未找到适合我所寻找的问题所以我提出了这个问题。

这里给出的两个答案对于我来说,包围参数但从不使用它们的方法有点太短了。

然后我查看了旁边的“相关”部分,发现了一个比我更好的问题,答案更长,更满意我的问题并更详细地回答。

感谢所有回复的人。如果其他人在同一个问题中发现自己,那么问题/答案就会帮助我理解它。

Why do android methods accept View objects, but the objects are unused?