可能重复:
How to pass object from one activity to another in Android
我想将用户定义的类对象从一个Activity
传递给另一个String
。我知道我们将Activity
传递给其他Intent in=new Intent(LoginActivity.this,WebserviceClient.class);
in.putExtra("res", "abc");
startActivityForResult(in, 0);
的方式:
Intent i = getIntent();
res = i.getStringExtra("res");
以及如何在另一边提取它:
{{1}}
但是我想知道如何为用户定义的对象双方做这个?
答案 0 :(得分:1)
您需要将您的类实现到Parcelable
界面。
本指南可能有助于Pass complex object data structure to Intent
答案 1 :(得分:1)
让您的班级实施Parcelable
并将其作为额外意图传递。
答案 2 :(得分:1)
实现 Serializable 该类要发送的对象类
Intent in=new Intent(LoginActivity.this,WebserviceClient.class);
in.putExtra("res",objectOfClass);
startActivityForResult(in, 0);
提取另一方
Bundle extraData = getIntent().getExtras();
if (extraData != null) {
objectOfClass = (Classname) extraData
.getSerializable("res");
}
答案 3 :(得分:1)
/**
* A method to create pacelable{@link Parcelable} object
* @param album
* @return
*/
public ParcelHashMap parseObject(CategoryBean mCategoryBean){
ParcelHashMap p = new ParcelHashMap();
p.put("CategoryBean", mCategoryBean);
return p;
}
并通过Activity1
传递它Intent in=new Intent(Activity1.this,Activity2.class);
in.putExtra("myCatObject", parseObject(selectedCategoryObject));
startActivity(in);
并且在secondActivity中只传递parcelabel对象以获得如下所示的真实对象
/**
* To get parsed object from Parcelable object, you can use int,string or any object
* @param parsedObje Parcelable
* @return PhotosBean Object
*/
public CategoryBean parseObject(Parcelable parsedObje){
return (CategoryBean)((ParcelHashMap)parsedObje).get("CategoryBean");
}
parcel的类
package com.ixorian; import java.util.HashMap;
import android.os.Parcel;
import android.os.Parcelable;
public class ParcelHashMap implements Parcelable {
private HashMap<String,Object> map;
public ParcelHashMap() {
map = new HashMap<String,Object> ();
}
public ParcelHashMap(Parcel in) {
map = new HashMap<String,Object> ();
readFromParcel(in);
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public ParcelHashMap createFromParcel(Parcel in) {
return new ParcelHashMap(in);
}
public ParcelHashMap[] newArray(int size) {
return new ParcelHashMap[size];
}
};
// @Override
public int describeContents() {
return 0;
}
// @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(map.size());
// for (String s: map.keySet().toArray(new String[0])) {
// dest.writeString(s);
// dest.writeString((String) map.get(s));
// }
for (HashMap.Entry<String, Object> entry : map.entrySet()) {
dest.writeString(entry.getKey());
dest.writeValue(entry.getValue());
}
}
public void readFromParcel(Parcel in) {
int count = in.readInt();
for (int i = 0; i < count; i++) {
map.put(in.readString(), in.readValue(ParcelHashMap.class.getClassLoader()));
}
}
public Object get(String key) {
return (Object) map.get(key);
}
public void put(String key, Object value) {
map.put(key, value);
}
}
答案 4 :(得分:0)
我遵循在Andriod活动之间传递自定义对象的一种简单方法是在我的项目中定义一个Singleton类,其中包含所有对象&amp;我需要在Activities之间传递的变量,假设你想要从Activity A传递一个自定义对象 - > B,你定义一个包含你要传递的对象模板的Singleton类,你只需在Activity A中调用一个setter方法和活动B中的吸气剂。