如果这个问题对你来说可能很愚蠢,我很抱歉,但我是 Android 编程的新手,我无法理解 Java 语法。
你能一步步解释这行代码发生了什么吗?
View.OnClickListener ourOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v){
ourMessage.setText(“The button got tapped”);
}
};
最佳答案
在View
类中声明了一个接口(interface),它是OnClickListener
,在View.java
中是这样的 来源:
/**
* Interface definition for a callback to be invoked when a view is clicked.
*/
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
通常你会创建一个类,并让它实现这个接口(interface):
public void MyClass implements View.OnClickListener {
@Override
public void onClick(View view) {
// do stuff
}
}
但有时您不需要将此类放在单独的文件中。相反,您可以创建匿名内部类,这就像创建新类一样,只有方法是来自指定接口(interface)的方法:
new View.OnClickListener() {
@Override
public void onClick(View v){
ourMessage.setText(“The button got tapped”);
}
}
然后,您可以在需要 View.OnClickListener
接口(interface)的任何地方使用此类的实例。
还值得一提的是,匿名内部类 将保存对您在其中创建它的类的引用。所以这将是合法有效的:
public class MyClass {
private int clicksCount = 0;
private View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
clicksCount += 1;
}
}
}
在这里您可以访问 clicksCount
字段,它是 MyClass
的字段,甚至可以从实现 OnClickListener
的内部类访问。旁注 - 如果你想访问一个变量,你需要向它添加 final
修饰符:
public void testMethod(final int canAccess, int cantAccess) {
final String test = otherView.getText().toString();
myView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Cannot access cantAccess, because it's not final
if (test.length == 0) { // can access
// do something
}
}
}
关于java - View.OnClickListener,你能解释一下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32800603/