使用"这个"引用"上下文"

时间:2014-08-18 18:02:45

标签: android android-activity

我可以使用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

2 个答案:

答案 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