这是一个坏习惯,为什么会这样?因此,在 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();
}
});
答案 0 :(得分:9)
这是一个坏习惯,为什么会这样?
是的,这是一个坏习惯。这是浪费代码。 this
比mContext
短,并且您还有一行额外的代码来设置数据成员。
我不同意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();
}
});