Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么他们的参数是onClick方法的View类型_Android - Fatal编程技术网

Android 为什么他们的参数是onClick方法的View类型

Android 为什么他们的参数是onClick方法的View类型,android,Android,为什么此函数的参数为View类型?您可以在任何视图上设置onClickListener。这意味着该侦听器不知道您将侦听器设置为哪种类型的元素 由于所有元素都可以在扩展视图上设置onClickListener,因此它会提供视图,因为它可以确定您的元素是视图 您可以自己检测单击的元素,然后根据需要将其强制转换为特定元素。您可以在不同视图上使用相同的onClick。因此,在这种情况下,视图将用于标识单击了哪个视图 比如说 如果有3个带有android的按钮:onClick=“activity” 你可以

为什么此函数的参数为View类型?您可以在任何视图上设置onClickListener。这意味着该侦听器不知道您将侦听器设置为哪种类型的元素

由于所有元素都可以在
扩展视图
上设置onClickListener,因此它会提供视图,因为它可以确定您的元素是
视图


您可以自己检测单击的元素,然后根据需要将其强制转换为特定元素。

您可以在不同视图上使用相同的onClick。因此,在这种情况下,视图将用于标识单击了哪个视图

比如说 如果有3个带有android的按钮:onClick=“activity”

你可以这样做

....
android:onClick = "activity1";
....

public void activity1(View view)
{
 .....
}

现在,您可以在3个不同的按钮上使用相同的onClick。

因为视图是android所有小部件的基类

例如,TextView扩展视图、ImageView扩展视图等

您可以编写View v=newtextview()


因此,现在您可以使用视图提供的基本功能,如getItemID等。

这样您就可以对多个不同的视图使用相同的方法。 请尝试下面的代码

public void activity(View view)
{
    switch(view.getItemId()){

     case R.id.button1:
     break;
     case R.id.button2:
     break;
     case R.id.button3:
     break;

     }
}
所以基本上,您可以对多个小部件使用相同的方法,并在应用程序中保存方法计数和额外代码


希望这有帮助

为什么没有?你希望是什么类型的?如果你认为你会得到你附加的视图类型,那么不。。。将其转换为类型,例如Textview v=(Textview)视图;一个原因是,您可以对多个视图重复使用同一个侦听器,并且您可能需要一种方法来了解单击了哪一个。如果是
活动(按钮视图)
,这也可以工作,但它并不能真正回答问题
<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onActivityClick" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onActivityClick" />

<Button
    android:id="@+id/button3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onActivityClick" />
public void onActivityClick(View view){
    switch (view.getId()){
        case R.id.button1:
            //do something();
            break;
        case R.id.button2:
            //do something();
            break;
        case R.id.button3:
            //do something();
            break;
    }
}