可以使用“mContext”(在onCreate初始化)吗?

时间:2011-02-26 16:32:42

标签: android android-context

这是一个坏习惯,为什么会这样?因此,在 onCreate 之后的每个活动中添加此内容...

mContext = this;

然后在上下文 必需的所有其他情况下使用它?例如

Toast.makeText(mContext, mContext.getString(R.string.someString), Toast.LENGTH_LONG);

编辑:如果我有类似的内容...如何传递上下文怎么办?由于 无法应用(因为 View.OnClickListener())。

someButton = (Button) findViewById(R.id.someButton);
someButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(mContext, mContext.getString(R.string.warning), Toast.LENGTH_LONG).show();
    }
});

2 个答案:

答案 0 :(得分:9)

  

这是一个坏习惯,为什么会这样?

是的,这是一个坏习惯。这是浪费代码。 thismContext短,并且您还有一行额外的代码来设置数据成员。

我不同意Damiean先生关于总是使用getApplication()的建议。当您特别需要getApplication()对象时,请使用Application。您既不需要也不想要Application对象来创建Toast - 您的Activity非常适合在Context使用Application。 {{1}}对象无法在很多地方工作,特别是在处理涉及UI的事情时。

答案 1 :(得分:0)

您可以改用this。即使在OnClickListener或其他子类中,您也可以使用ActivityName.this

someButton = (Button) findViewById(R.id.someButton);
someButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(ActivityName.this, ActivityName.this.getString(R.string.warning), Toast.LENGTH_LONG).show();
    }
});