我想将一个新的但不同的Intent传递给Activity。如何区分新的Intent和以前的Intent?onNewIntent()应该放什么样的代码?一个例子会非常有帮助。
我想要向一个Activity传递一个新的Intent,这个Intent与之前的Intent有所不同。如何区分新Intent和之前的Intent?在`onNewIntent()`方法中应该编写什么代码?一个示例将非常有帮助。我想将一个新的但不同的Intent传递给Activity。如何区分新的Intent和以前的Intent?onNewIntent()应该放什么样的代码?一个例子会非常有帮助。
我想要向一个Activity传递一个新的Intent,这个Intent与之前的Intent有所不同。如何区分新Intent和之前的Intent?在`onNewIntent()`方法中应该编写什么代码?一个示例将非常有帮助。onNewIntent(Intent)
的一部分而出现的。原始的Intent
仍然可以通过getIntent()
获得。onNewIntent
中,以便使用新参数更新UI;可能类似于您在onCreate
中所做的操作。onNewIntent
中调用setIntent(intent)
,以确保在Activity生命周期内未来对getIntent()
的任何调用都能获取最新的Intent
数据。意图如何到达您的活动取决于启动模式(请参阅启动模式文档,网址为http://developer.android.com/guide/topics/manifest/activity-element.html#lmode)。
对于“ standard”(默认值)的启动模式,使用新意图的startActivity将导致在新实例的活动中创建onCreate和该意图。
对于“ singleTop”和“ singleTask”启动模式,使用新意图的startActivity将导致以下结果之一
a)如果该活动未运行,则使用该意图创建一个新实例的活动,并在其中创建onCreate [与上述“ standard”相同];或者 b)如果该活动已经在运行,则在现有活动中使用该意图创建onNewIntent。
对于b),第二个意图在onNewIntent参数中可用。您对其的处理取决于您的应用程序。某些应用程序只会忽略它,而其他应用程序将执行setIntent()并开始重新初始化/更新新意图的处理。
public class MainActivity extends Activity
{
public void onCreate(Bundle SavedInstanceState)
{
}
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
if(intent.getStringExtra("methodName").equals("myMethod"))
{
myMethod();
}
}
public void myMethod()
{
}
}
public class CallingActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
Intent i=new Intent(this,MainActivity.class);
i.putExtra("methodName","myMethod");//goes to previous INtent
startActivity(i);//will trigger only myMethod in MainActivity
}
}
public class CallingActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
Intent i=new Intent(this,MainActivity.class);
startActivity(i);//will trigger New Activity i.e. MainActivity
}
}
如果您不希望在每个后续的onResume()
中重复使用新的意图,我建议您将意图存储在实例字段中,而不是通过setIntent(intent)
。
这样,一旦您使用了该意图,就可以将该实例字段重置为null,而不会丢弃原始启动意图。
更多详细信息请参见我的答案: https://dev59.com/NGsz5IYBdhLWcg3wpZry#21261404
setIntent(Intent)
已被Android框架工程师描述为一个错误:
https://groups.google.com/forum/#!topic/android-developers/vrLdM5mKeoY