我很想知道如何在不调用 ON 和对象引用的情况下调用方法。
这是我创建的方法:
public void changeAlpha(float f, View v) {
v.animate().alpha(f).setDuration(5000);
}
在这里你可以看到在If / elif流程中,我调用了changeAlpha
而没有在对象引用上调用它。怎么可能?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
imageView = (ImageView) findViewById(R.id.dragonImage);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (imageView.getAlpha() == 1) {
changeAlpha(0, imageView);
} else if (imageView.getAlpha() == 0) {
changeAlpha(1, imageView);
}
}
});
}
答案 0 :(得分:4)
在Java中,如果您没有明确提及对象,则会添加隐式this
。
这是例如如何调用findViewById
方法,它等同于this.findViewById
此外,在这种情况下,您有anonymous inner class(扩展View.onClickListener)。 Java中的内部类可以访问包含的类'方法,这就是为什么你可以调用changeAlpha的原因。这实际上相当于ContainingClass.this.changeAlpha
。 ContainingClass.this
是Java中引用包含类的实例的方式(this
仅引用内部类)。同样,引用是隐式的,您无需键入它并允许访问changeAlpha方法。
答案 1 :(得分:1)
在您的示例代码中,您从内部类调用该方法。为了这个代码工作,你必须指出它是什么类(隐式或非)。
例如,如果 onCreate 方法属于MainActivity类,则可以通过键入MainActivity.this.changeAlpha
来调用changeAlpha。