Intent构造函数的参数

Intent类有6个构造函数

意图()

创build一个空的意图。


意图(意图o)

复制构造函数。


意图(string行动)

用给定的动作创build一个意图。


意图(string行动,Uri uri)

用给定的动作和给定的数据url创build一个intent。


Intent(Context packageContext,Class cls)

为特定组件创build一个意图。


Intent(String action,Uri uri,Context packageContext,Class cls)

使用指定的操作和数据为特定组件创build一个意图。

我在android编程中几乎是新的,大多数时候使用第五个,当我需要启动另一个ActivityFragment

 Intent(Context packageContext, Class<?> cls) 

当我想从一个Fragment开始一个Activity ,我这样做:

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

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

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

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

Solutions Collecting From Web of "Intent构造函数的参数"

在第五个意图声明中,请仔细看看Context 。 它反映了多态性。 Intent需要一个Context参数,所以你可以传递Context任何对象或从Context类派生的对象。

Activity,AppCompatActivity,IntentService,Service都从Context类派生,因此可以作为parameter passing给方法。

活动inheritance上下文。 因此,如果你在一个活动中,你只需要传递自己的使用上下文。 它还包含一个指向getBaseContext()的指针。 如果您需要整个应用程序上下文,您可能偶尔需要引用它,但最有可能的是您不会有一段时间。

你可以在这里find关于Activity类的更多细节。

这个关于意图构造函数参数的问题和你的类似,并且有一个非常好的答案。 我想你想看看。

希望能帮助到你。

活动扩展上下文,所以你可以投它:

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