我可以使用getApplicationContext()
或getContext()
等方法获取上下文,但我对使用“this”获取以下示例中的“上下文”感到困惑:
public class GeoActivity extends Activity {
private Button mTrueButton;
private Button mFalseButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_geo);
mFalseButton = (Button) findViewById(R.id.false_button);
mFalseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// another method to get the context
// Context context = getApplicationContext();
Toast.makeText(GeoActivity.this, R.string.incorrect_toast, Toast.LENGTH_SHORT).show();
}
});
}
}
在此代码中,我们使用GeoActivity.this
来引用context
,但我不明白GeoActivity.this
到底是什么以及它指向的是什么。还有为什么在这种情况下我们不能简单地使用this
?
答案 0 :(得分:2)
活动是一种背景。如果你使用"这个",它指的是" this"出现,所以如果你在Activity的方法中使用它,它会引用Activity。因为活动是一个上下文,你可以使用"这个"当你需要传递一个Context。
由于你正在使用"这个"这种情况有点复杂。在OnClickListener中。您正在创建一个匿名内部类以用作OnClickListener。这很好,但这意味着如果你只是使用"这个"在OnClickListener内部,在Activity内部,然后它将引用OnClickListener而不是Activity。如果你有这样的嵌套类,你可以通过将类名放在" this"前面来指定你想要引用的实例。所以在你的Toast.makeText方法中,"这个"会引用你的Activity中的OnClickListener,但是" GeoActivity.this"是指你的活动。
答案 1 :(得分:1)
来自Android documentation - Activity
扩展了背景信息,因此您可以在需要Activity
时使用Context
java.lang.Object
↳ android.content.Context
↳ android.content.ContextWrapper
↳ android.view.ContextThemeWrapper
↳ android.app.Activity