在XML文件中编写onClick()与在Java文件中使用onClick函数编写侦听器有什么区别?

在XML文件中编写onClick()与在Java文件中使用onClick函数编写侦听器有什么区别?,java,android-studio,Java,Android Studio,在Android中,您可以编写按钮,例如onClick()函数并将函数链接到它。但大多数时候,我看到人们没有这样做,而是在Java文件中的按钮上激活了onClickListener。 为什么?两者之间有什么区别?是否存在不允许您使用其中一个的情况?从功能上讲,您可以使用其中一个,并且它们都可以做相同的事情。您使用哪种代码没有限制,但是许多开发人员会喜欢使用Java代码,因为它更灵活,允许您在需要时添加更多功能。有时您可能会看到人们在XML文件中添加一个非常基本的方法调用,然后链接到一个Java方

在Android中,您可以编写按钮,例如
onClick()
函数并将函数链接到它。但大多数时候,我看到人们没有这样做,而是在Java文件中的按钮上激活了
onClickListener


为什么?两者之间有什么区别?是否存在不允许您使用其中一个的情况?

从功能上讲,您可以使用其中一个,并且它们都可以做相同的事情。您使用哪种代码没有限制,但是许多开发人员会喜欢使用Java代码,因为它更灵活,允许您在需要时添加更多功能。有时您可能会看到人们在XML文件中添加一个非常基本的方法调用,然后链接到一个Java方法来完成他们所需要的一切


总而言之,这只是一个偏好和编码风格的问题。

从功能上讲,您可以使用其中任何一种,它们都可以做相同的事情。您使用哪种代码没有限制,但是许多开发人员会喜欢使用Java代码,因为它更灵活,允许您在需要时添加更多功能。有时您可能会看到人们在XML文件中添加一个非常基本的方法调用,然后链接到一个Java方法来完成他们所需要的一切


总之,这只是偏好和编码风格的问题。

简短解释:

通过xml的
onClick
有助于代码中的
fixed
实现,但使用
OnClickListener
更适合于具有多个UI元素或复杂UI流的复杂应用程序结构,但两者的作用完全相同

详细说明:

通过布局设置
onClick
时,由
setContentView
将此属性传递给受尊重的视图构造函数&由视图代码管理

但是通过使用
OnClickListener
,当涉及到复杂的应用程序结构时,您可以改变单击事件管理控件的行为

下面是
onClick
属性的内部实现的快照

case R.styleable.View_onClick:
                    if (context.isRestricted()) {
                        throw new IllegalStateException("The android:onClick attribute cannot "
                                + "be used within a restricted context");
                    }

                    final String handlerName = a.getString(attr);
                    if (handlerName != null) {
                        setOnClickListener(new DeclaredOnClickListener(this, handlerName));
                    }
内部实现本身使用的是
setOnClickListener
,因此两者都是相同的,
正如我前面提到的,只有当应用程序很简单时才使用xml onClick选项,否则就使用Listener。

简短说明:

通过xml的
onClick
有助于代码中的
fixed
实现,但使用
OnClickListener
更适合于具有多个UI元素或复杂UI流的复杂应用程序结构,但两者的作用完全相同

详细说明:

通过布局设置
onClick
时,由
setContentView
将此属性传递给受尊重的视图构造函数&由视图代码管理

但是通过使用
OnClickListener
,当涉及到复杂的应用程序结构时,您可以改变单击事件管理控件的行为

下面是
onClick
属性的内部实现的快照

case R.styleable.View_onClick:
                    if (context.isRestricted()) {
                        throw new IllegalStateException("The android:onClick attribute cannot "
                                + "be used within a restricted context");
                    }

                    final String handlerName = a.getString(attr);
                    if (handlerName != null) {
                        setOnClickListener(new DeclaredOnClickListener(this, handlerName));
                    }
内部实现本身使用的是
setOnClickListener
,因此两者都是相同的,
正如我前面提到的,只有当应用程序很简单时才使用xml onClick选项,否则就使用Listener。

根据我的个人经验,在代码中声明
onClick
listeners,使其更具可读性-您可以轻松地检查从何处调用处理方法,然而,当处理方法仅在XML中设置时,Android Studio甚至会将该方法标记为未使用。根据我的个人经验,在代码中声明
onClick
侦听器,使其更具可读性-您可以轻松检查从何处调用处理方法,而当处理方法仅在XML中设置时,Android Studio甚至会将该方法标记为未使用。