Android 请解释一下这个结构,为什么会这样使用?
我在[本教程][1]中找到了下面的代码段。我不明白到底发生了什么。看起来按钮被创建了,然后一个侦听器被设置为在单击时侦听,但是为什么整个onClickView方法都在。。。sendMail.setOnClickListener的 关于setOnClickListener,Eclipse表示: 注册在单击此视图时要调用的回调。如果此视图不可单击,则它将变为可单击 那么,我说的结构就是几乎同时看到按钮是否可点击,如果不可点击,则使其可点击,并为按钮创建一个侦听器,这对吗 但我仍然不明白为什么它是这样写和结构的:Android 请解释一下这个结构,为什么会这样使用?,android,email,Android,Email,我在[本教程][1]中找到了下面的代码段。我不明白到底发生了什么。看起来按钮被创建了,然后一个侦听器被设置为在单击时侦听,但是为什么整个onClickView方法都在。。。sendMail.setOnClickListener的 关于setOnClickListener,Eclipse表示: 注册在单击此视图时要调用的回调。如果此视图不可单击,则它将变为可单击 那么,我说的结构就是几乎同时看到按钮是否可点击,如果不可点击,则使其可点击,并为按钮创建一个侦听器,这对吗 但我仍然不明白为什么它是这样
Button sendMail = (Button) findViewById(R.id.send_email);
sendMail.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Mail m = new Mail("email@gmail.com", "password");
m.setTo("email@gmail.com");
m.setFrom("email@gmail.com");
m.setSubject("This is an email sent using my Mail JavaMail wrapper from an Android device.");
m.setBody("Email body.");
try {
m.addAttachment("/sdcard/filelocation");
if(m.send()) {
Toast.makeText(m, "Email was sent successfully.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Email was not sent.", Toast.LENGTH_LONG).show();
}
} catch(Exception e) {
Toast.makeText(getApplicationContext(), "There was a problem sending the email.", Toast.LENGTH_LONG).show();
Log.e("MailApp", "Could not send email", e);
}
}
});
我认为应该是:
sendMail.setOnClickListener();
sendMail.onClick(this);
public void onClick(View view) {...}
单击此视图时要调用的任何注释或注册回调。如果此视图不可单击,它将变为可单击。在setOnClickListener方法中创建侦听器的新实例时,它就是这样工作的。这一点也不奇怪 或者,您可以在按钮XML端为android:onClick设置一个方法。在代码中,您需要执行以下操作:
public void testMethod(View v) {
// code
}
它被称为匿名类。与使用class关键字创建一个新类不同,您只需对所有必需的方法使用语法new{…}
在上阅读有关匿名类的更多信息它被称为匿名内部类,这是一种常见的Java模式。您可以自由定义实现该方法的显式类,并将侦听器设置为该类。这基本上是一个子类。这种方法称为匿名子类化。它允许您创建一个子类并一起使用
匿名子类没有构造函数,因为该类没有名称。为此,您需要使用实例初始化器。基本上,这些类是在创建另一个类文件时使用的,因为它感觉是多余的,如果您想将类代码放在同一块中,至少这就是我使用它的原因 指向教程的链接似乎丢失了。