我正在尝试使用 Intent 的附加功能在我的应用程序中传递一些数据。
我像这样将数据附加到 Intent :
Intent i = new Intent(ActivityFrom.this, ActivityTo.class);
i.putExtra(CONST_KEY, true);
startActivity(i);
与
public static final String CONST_KEY = "MyBooleanValue";
我正在尝试在启动的 ActivityTo 的 onCreate 方法中检索数据,如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extra = getIntent().getExtras();
if ( extra != null ) {
boolean b = extra.getBoolean(ActivityFrom.CONST_KEY);
}
}
但是,我从未遇到过 if block ,因为 Bundle
始终为 null
。
为什么我的 extras 丢失了?我需要更改什么才能检索我为 Intent 添加的额外内容?
编辑
- 更正了代码中的拼写错误
- 添加了完整的
onCreate
方法声明 这是
ActivityTo
在 list 中的声明:<activity android:name=".ActivityTo" android:launchMode="singleTask" android:screenOrientation="portrait"> </activity>
最佳答案
问题出在接收任务的android:launchMode="singleTask"
属性上。设置此设置后,所有以 ActivityTo
Activity 为目标的 Intent 都将由同一对象接收。如果 Activity 已创建,则通过 Activity 的 onNewIntent(Intent)
方法发送 Intent 。像这样覆盖它:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
这样,您可以使用 getIntent()
获取新的 Intent 。
关于Android Intent 额外数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33994021/