Activityname.this() 和 this 之间有啥区别吗?
Posted
技术标签:
【中文标题】Activityname.this() 和 this 之间有啥区别吗?【英文标题】:Is there any difference between Activityname.this() & this?Activityname.this() 和 this 之间有什么区别吗? 【发布时间】:2013-09-13 07:06:11 【问题描述】:Activityname.this()
和 this
在 android 中有什么区别吗?
我正在尝试使用对话框中的按钮从同一活动中打开一个活动?我有意使用getApplicationContext()
。在某些手机上它可以工作,但在其他手机上它会强制关闭?
在 ActivityName.this 和 this 之间我应该使用哪一个以及为什么?
【问题讨论】:
【参考方案1】:Android 中的 Activityname.this() 和 this 有什么区别吗?
这取决于您从哪里调用它。如果您在Activity
内部,而不是在onCreate
中的侦听器或内部类内部,那么没有。他们都引用Activity context
。
如果您在onClickListener
内部说,那么是的。 this
指的是listener
,你需要使用ActivityName.this
或类似的东西
someButton.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
Intent i = (v.getContext(), NextActivity.class); use the button context which will be the same as the activity context
startActivity(i);
);
这与使用Dialog
或AlertDialog
时相同,您需要使用ActivityName.this
This is an answer 谈到了Context
s 的不同之处,但如果能找到更好的我会看看
A great Context explanation
编辑以提高完整性
AFAIK、getApplicationContext()
或 ActivityName.this
适合 Toasts
。 example in the docs 使用 getApplicationContext()
。但是Toast Docs 说
参数 context 要使用的上下文。通常是您的 Application 或 Activity 对象。
所以在某些情况下可能会更好,但我一直使用Activity Context
,我想我会一直使用,直到我对此进行更正。
【讨论】:
如果我在同一个 MainActivity 中,我可以在同一个活动的每个地方都使用 MainActivity.this() 而不是 getApplicationContext() 吗? 是的,而且在大多数情况下,它会比使用getApplicationContext()
更好。我找不到答案,但 CommonsWare 对差异有很好的解释。 Context
在您第一次使用 Android 时可能会感到困惑
我找到并添加到我的答案中
我同意……那家伙通常做得不错。就像他知道一两件事一样;)
还有一个问题。将 getApplicationContext() 替换为 MainActivity.this() 会对 Toasts 产生任何影响吗?因为谷歌建议在 Toast 中使用 getApplicationContext() ...【参考方案2】:
没有MyActivity.this
与仅在活动本身中使用this
相同,而不是类似可运行的东西,其中this
指的是可运行而不是上下文
如果在片段中,则应始终使用this
或getActivity()
,切勿使用getApplicationContext()
在这里查看为什么你不应该使用getApplicationContext()
getApplication() vs. getApplicationContext()
【讨论】:
如果我在同一个 MainActivity 中,我可以在同一个活动的每个地方都使用 MainActivity.this() 而不是 getApplicationContext() 吗? 是的,你当然可以,这将是获取上下文的首选方式以上是关于Activityname.this() 和 this 之间有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章
解决办法:ORA-00845: MEMORY_TARGET not supported on thi
sh 在Ubuntu 12.04上将Pygame 1.9.1安装到Python2.7 virtualenv中的脚本。确保在运行thi之前激活了virtualenv
Android Studio:Unable to add window android.view.ViewRootImpl$W@5e2d85a -- permission denied for thi
a-second-operation-started-on-this-context-before-a-previous-operation-completed
Windows ->> FIX: “The security database on the server does not have a computer account for thi