Intent构造函数参数

时间:2015-08-12 16:36:55

标签: android android-fragments android-intent

Intent类有6个构造函数

  

意图()

     

创建一个空意图。

  

意图(意图o)

     

复制构造函数。

  

意图(字符串操作)

     

使用给定的操作创建一个意图。

  

意图(字符串操作,Uri uri)

     

使用给定操作和给定数据网址创建意图。

  

意图(Context packageContext,Class cls)

     

为特定组件创建意图。

  

意图(字符串操作,Uri uri,Context packageContext,Class cls)

     

使用指定的操作和特定组件创建意图   数据

我在Android编程方面几乎全新,当我需要启动另一个ActivityFragment时,我大多使用第五个:

Intent(Context packageContext, Class<?> cls)

当我想从Activity开始Fragment时,我会这样做:

Intent i = new Intent(getActivity(), DestinationActivity.class);

据我所知,getActivity()将返回Activity

但是构造函数期望Context,这怎么可能???

是否有可能因为Activity返回的getActivity()隐式调用getApplicationContext() ???

3 个答案:

答案 0 :(得分:5)

在第五个Intent声明中非常仔细地查看参数Context。它反映了多态性。 Intent采用Context参数,因此您可以传递Context或派生自Context类的任何对象。

Activity,AppCompatActivity,IntentService,Service都派生自Context类,因此可以作为参数传递给方法。

答案 1 :(得分:2)

  

活动继承上下文。因此,如果您在活动中,则只需要传递自己以使用上下文。它还包含一个指向getBaseContext()的指针。如果您需要整个应用程序上下文,您可能偶尔需要引用它,但很可能您暂时不会参与。

您可以找到有关活动课程here的更多详细信息。

关于意图构造函数参数的question与您的类似,并且有一个非常好的答案。我想你想看看它。

希望它有所帮助。

答案 2 :(得分:1)

活动扩展了Context,因此您可以将其强制转换:

Intent i = new Intent((Context)getActivity(), DestinationActivity.class);