【问题标题】:Is there any difference between Activityname.this() & this?Activityname.this() 和 this 之间有什么区别吗?
【发布时间】:2013-09-13 07:06:11
【问题描述】:

Activityname.this()this 在 Android 中有什么区别吗?

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

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

【问题讨论】:

    标签: android android-intent android-activity forceclose


    【解决方案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 适合 Toastsexample 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() 吗?
    • 是的,你当然可以,这将是获取上下文的首选方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2010-11-06
    • 2011-04-12
    • 2017-04-05
    • 2014-09-18
    • 2015-06-14
    相关资源
    最近更新 更多