在View
类中声明了一个接口,叫做OnClickListener
,它在View.java
源文件中长这样:
public interface OnClickListener {
void onClick(View v);
}
通常你需要创建一个类,并让它实现这个接口:
public void MyClass implements View.OnClickListener {
@Override
public void onClick(View view) {
}
}
但有时您不需要在单独的文件中使用此类。相反,您可以创建匿名内部类,就像创建新类一样,其中只有接口指定的方法:
new View.OnClickListener() {
@Override
public void onClick(View v){
ourMessage.setText(“The button got tapped”);
}
}
您可以随时使用此类的实例,以替代需要 View.OnClickListener
接口的地方。
另外需要提醒的是,匿名内部类将会持有创建它的外部类的引用。因此,下面的代码是合法且有效的:
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) {
if (test.length == 0) {
}
}
}