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()thisandroid 中有什么区别吗?

我正在尝试使用对话框中的按钮从同一活动中打开一个活动?我有意使用getApplicationContext()。在某些手机上它可以工作,但在其他手机上它会强制关闭?

ActivityName.thisthis 之间我应该使用哪一个以及为什么?

【问题讨论】:

【参考方案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);
     
);

这与使用DialogAlertDialog 时相同,您需要使用ActivityName.this

This is an answer 谈到了Contexts 的不同之处,但如果能找到更好的我会看看

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 指的是可运行而不是上下文

如果在片段中,则应始终使用thisgetActivity(),切勿使用getApplicationContext()

在这里查看为什么你不应该使用getApplicationContext()

getApplication() vs. getApplicationContext()

【讨论】:

如果我在同一个 MainActivity 中,我可以在同一个活动的每个地方都使用 MainActivity.this() 而不是 getApplicationContext() 吗? 是的,你当然可以,这将是获取上下文的首选方式

以上是关于Activityname.this() 和 this 之间有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

Python的 u,r,b,f 分别什么意思?

解决办法: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