public class NewPlanet extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
ImageView marsImage = (ImageView) findViewById(R.id.imageMars);
marsImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
WorldGen mars = new WorldGen("Mars", 642, 3.7);
mars.setPlanetColonies(1);
Toast.makeText(NewPlanet.this, "Mars Created", Toast.LENGTH_SHORT).show();
}
});
}
}
NewPlanet.this
引用什么上下文?为什么类makeText
中的Toast
需要此上下文?我理解在引用类时使用关键字this
并使用点表示法来访问this.field
中的字段和构造函数,但是this
关键字何时出现在类引用之后呢?
答案 0 :(得分:3)
实例NewPlanet.this
表示作为外部类的NewPlanet
的对象。如果您仅使用this
,则它将代表匿名类OnClickListener
的实例。
编译后你会得到这样的东西:
marsImage.setOnClickListener$1(new OnClickListener$1(this));
static class OnClickListener$1 implements OnClickListener {
private final NewPlanet ref;
OnClickListener$1(NewPlanet ref) {
this.ref= ref;
}
@Override
public void onClick(View v) {
WorldGen mars = new WorldGen("Mars", 642, 3.7);
mars.setPlanetColonies(1);
Toast.makeText(ref, "Mars Created", Toast.LENGTH_SHORT).show();
}
}
答案 1 :(得分:2)
NewPlanet.this
是对外类this
的引用。事实上,你是从匿名的内部阶级中使用它。
答案 2 :(得分:0)
它是对NewPlanet的引用,即调用onCreate()方法