这是一种奇怪的方式来创建一个意图?

问题描述:

我有一个图书馆项目和一个项目,每个应用程序的免费和付费版本。在图书馆项目中,我有一个“基本活动”。这个“基本活动”必须根据其是免费还是付费版本开始儿童活动。这是一种奇怪的方式来创建一个意图?

我所做的只是在我用startActivity()引发意图之前,我调用了一个'Base Activity'中的方法,它必须返回意图。我重写我的“基本活动”的子类(付费和免费版本)这个方法,创建这样的意图:

return new Intent(subClassOfBaseActivity.this, ChildClassA.class); 

和:

return new Intent(subClassOfBaseActivity.this, ChildClassB.class); 

现在,我的问题是,它是确定通过传递subClassofBaseActivity.this而不是BaseActivity.this来创建意图?

此方法总体上没问题吗?

当你创建你需要通过ContextActivityIntent

现在,上下文是允许应用程序访问某些资源的接口。

基本上你的情况,你传递一个上下文和活动,因为它应该,但你问,如果你需要通过baseActivity作为上下文。 所以基本上我认为,因为这条线在Android开发者的:

Interface to global information about an application environment你需要通过基地活动为背景..

在另一边,在子类可能是从基类继承,因此上下文应该是相同的,但是当你传递baseClass作为上下文时,它会更加可读和清晰。

约上下文 http://developer.android.com/reference/android/content/Context.html

+0

因此,作为danijoo建议使用getBaseContext()将得到更好的更多信息/更清晰? – Koded101

+0

我会建议使用baseClass.this而不是getBaseContext,你可以在这里阅读它http://*.com/questions/1026973/android-whats-the-difference-between-the-various-methods-to-get-上下文 无论如何有一个方法称为getParent()这将返回父活动的上下文,如果当前视图(活动)是父活动的孩子 – Elior

+0

@ Koded101检查Android的源代码我发现这个' Context'仅用于获取应用程序包名称,所以我假设您可以*使用任何解决方案。我不认为有建议的方式来将上下文传递给'Intent'构造函数,只是为了创建Intent而使用你认为它更清晰的方式。其实我通过传递'AnyActivity.this'没有看到任何混淆的东西。 – andrew

是的,没关系。这个constructor取第一参数Context,其中Activity延伸。所以基本上你是通过参数Context而不是Activity

那很好。 Java将把第一个参数投入到Context(Activity extends Context)中,所以它没有关系。你也可以把getBaseContext()insteat Activity.this那里..