我试图在我的应用内部使用意图传递一些数据'附加功能。
我将数据附加到意图中,如下所示:
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
。
为什么我的演员会丢失?我需要更改什么来检索我为意图添加的额外内容?
修改的
onCreate
方法声明以下是清单中的ActivityTo
声明:
<activity
android:name=".ActivityTo"
android:launchMode="singleTask"
android:screenOrientation="portrait">
</activity>
答案 0 :(得分:8)
问题是接收任务的android:launchMode="singleTask"
属性。设置此选项后,同一对象将接收以ActivityTo
活动为目标的所有意图。如果已创建活动,则通过活动的onNewIntent(Intent)
方法发送意图。像这样覆盖它:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
这样,您可以使用getIntent()
获取新意图。
答案 1 :(得分:0)
请确保您的对象属性位于
writeToParcel(Parcel parcel, int flags)
从YourObject(in)
包裹中读取匹配内容
例如
public class User implements Parcelabel {
private String name;
private String addrss;
private String city;
// read from parcel
protected User(Parcel in) {
name = parcel.readString();
address = parcel.readString();
city = parcel.readString();
}
// write to parcel
writeToParcel(Parcel parcel, int flags){
parcel.writeString(name);
parcel.writeString(address);
parcel.writeString(city);
}
}
答案 2 :(得分:-2)
我想你应该试试
if(getIntent().getBooleanExtra(ActivityFrom.CONST_KEY,false)!=null){
Boolean b=getIntent().getBooleanExtra(ActivityFrom.CONST_KEY,false);
}
答案 3 :(得分:-2)
你可以试试这个
Main.java中的
Intent intent = new Intent(this, YourActivity.class);
String message = constkey.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
上面的oncreate方法
public final static String EXTRA_MESSAGE = "com.example.project.MESSAGE";
YourActivity.java中的
Intent intent = getIntent();
String message = intent.getStringExtra(Main.EXTRA_MESSAGE);
喜欢明智。