Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用“mContext”(在onCreate初始化)可以吗?_Android_Android Context - Fatal编程技术网

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

Android 使用“mContext”(在onCreate初始化)可以吗?,android,android-context,Android,Android Context,这是一个坏习惯吗?如果是,为什么?所以在每一个活动中,在onCreate之后添加这个 然后在需要上下文的所有其他情况下使用它?比如说 Toast.makeText(mContext, mContext.getString(R.string.someString), Toast.LENGTH_LONG); 编辑:如果我有这样的东西…应该如何传递上下文?因为View.OnClickListener无法应用此选项 这是一个坏习惯吗?如果是,为什么 是的,这是个坏习惯。这是对代码的浪费。这比mCont

这是一个坏习惯吗?如果是,为什么?所以在每一个活动中,在onCreate之后添加这个

然后在需要上下文的所有其他情况下使用它?比如说

Toast.makeText(mContext, mContext.getString(R.string.someString), Toast.LENGTH_LONG);
编辑:如果我有这样的东西…应该如何传递上下文?因为View.OnClickListener无法应用此选项

这是一个坏习惯吗?如果是,为什么

是的,这是个坏习惯。这是对代码的浪费。这比mContext短,您还有一行额外的代码用于设置数据成员

我不同意Damiean先生总是使用getApplication的建议。当您特别需要应用程序对象时,请使用getApplication。您既不需要也不希望创建Toast的应用程序对象—您的活动是一个非常适合在其中使用的上下文。应用程序对象在许多地方无法工作,特别是在处理涉及UI的事情时

这是一个坏习惯吗?如果是,为什么

是的,这是个坏习惯。这是对代码的浪费。这比mContext短,您还有一行额外的代码用于设置数据成员

我不同意Damiean先生总是使用getApplication的建议。当您特别需要应用程序对象时,请使用getApplication。您既不需要也不希望创建Toast的应用程序对象—您的活动是一个非常适合在其中使用的上下文。应用程序对象在许多地方无法工作,特别是在处理涉及UI的事情时。

您可以使用它。即使在OnClickListener或其他子类中,也可以使用ActivityName。如下所示:

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();
    }
});
你可以用这个代替。即使在OnClickListener或其他子类中,也可以使用ActivityName。如下所示:

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();
    }
});

我用另一个例子编辑了我的问题。Tnx。谢谢你的帮助。@svebee:这肯定是适用的。您必须使用外部类名(例如MyActivityClass)来定义它的作用域。这一点我再强调也不为UI使用应用程序上下文了。这通常会以意想不到的方式出现,尤其是在蜂巢中。我用另一个例子编辑了我的问题。Tnx。谢谢你的帮助。@svebee:这肯定是适用的。您必须使用外部类名(例如MyActivityClass)来定义它的作用域。这一点我再强调也不为UI使用应用程序上下文了。这通常会以意想不到的方式表现,尤其是在蜂巢中。
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();
    }
});