使用onclick或ID执行方法?

时间:2015-01-03 22:11:58

标签: java android events

保持简洁,这对于使用按钮管理Android点击事件更好吗?

将其分配给XML Construct行中的ID?

android:id="@+id/ButtonEventName"

通过Java检测新闻事件并使用它? 取自基于android studio的登录活动模板:

Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);
mEmailSignInButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        attemptLogin();
    }
});

或将按钮分配给onclick方法:

android:onClick="EventName"

集成Java端:

public void EventName(){}

使用按钮事件时哪个更有效,更可靠?

3 个答案:

答案 0 :(得分:1)

第1点 - 在代码中创建它允许您通过使方法私有来屏蔽方法访问,而以xml方式执行它会导致方法的暴露。

第2点 - android:onClick适用于API级别4以上,因此如果您的目标是< 1.6,那你就不能用了。

另外根据我的理解,这两个是相似的。

答案 1 :(得分:1)

这完全取决于您,但请记住,android:onClick="EventName"如果您在xml中定义它将作为Fragment的一部分而膨胀并且您尝试接收按钮时将不起作用按下Fragment本身。 onClick属性仅在Activities中搜索您指定的方法名称。

我建议您查看ButterKnife

答案 2 :(得分:1)

这两种方法都有其优点和缺点。我不知道哪一个更有效。

  1. 使用id + onClickListener是更复杂的代码,但它为您提供了对错误进行运行时检查的机会。在您的示例中,这将意味着额外的null检查。

  2. 第二种方法更易于阅读,但如果您没有EventName方法应用程序将崩溃

  3. 我更喜欢第二个,因为它更简单,并且更容易遵循逻辑并在更少的代码中发现错误。

    我还必须补充说,虽然第一个解决方案确实提供了避免应用程序崩溃的方法,但最终并不重要,因为如果findViewById返回null你基本上有相同的错误,那么代码就是与布局xml不匹配并添加null检查(在最终工作应用中应该是多余的)只是另外污染了代码。