Intent类有6个构造函数
意图()
创建一个空意图。
意图(意图o)
复制构造函数。
意图(字符串操作)
使用给定的操作创建一个意图。
意图(字符串操作,Uri uri)
使用给定操作和给定数据网址创建意图。
意图(Context packageContext,Class cls)
为特定组件创建意图。
意图(字符串操作,Uri uri,Context packageContext,Class cls)
使用指定的操作和特定组件创建意图 数据
我在Android编程方面几乎全新,当我需要启动另一个Activity
或Fragment
时,我大多使用第五个:
Intent(Context packageContext, Class<?> cls)
当我想从Activity
开始Fragment
时,我会这样做:
Intent i = new Intent(getActivity(), DestinationActivity.class);
据我所知,getActivity()
将返回Activity
但是构造函数期望Context
,这怎么可能???
是否有可能因为Activity
返回的getActivity()
隐式调用getApplicationContext()
???
答案 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);