我想将实现某个接口(例如IConnect)的对象(不是数据!)传递给新的Activity。 Activity将从此对象调用一些方法来获取数据。
怎么做? (Serializable和Parcelable是我想的对象/数据/结构,而不是'DO'的对象/接口)。
我应该在Intent extras中传递一个类名吗?然后Activity会创建所需的对象吗? 如何将一个对象(一些实现IConnect的不同类)注入一个新的Activity?
答案 0 :(得分:4)
public class MyParcelable implements Parcelable {
private String mVal;
public MyParcelable(String val) {
mVal = val;
}
public static final Parcelable.Creator<MyParcelable> CREATOR =
new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
String s = in.readString();
return new MyParcelable(s);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
public String getValue() {
return mVal;
}
public void writeToParcel(Parcel p) {
p.writeString(mVal);
}
public String toString() {
return "MyParcelable[val=" + mVal + "]";
}
}
public class SendParcelable extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Intent intent = new Intent(this, ReceiveParcelable.class);
Parcelable p = new MyParcelable("test");
intent.putExtra("myparcelable", p);
Log.i("ParcelDemo", "Sending Parcelable");
startActivity(intent);
}
}
public class ReceiveParcelable extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Intent intent = getIntent();
Parcelable p = intent.getParcelableExtra("myparcelable");
Log.i("ParcelDemo", "Got Parcelable " + p);
if (p != null && p instanceof MyParcelable &&
((MyParcelable) p).getValue().equals("test")) {
Log.i("ParcelDemo", "Success!");
} else {
Log.i("ParcelDemo", "Failure!");
}
}
}
希望这有帮助!
答案 1 :(得分:1)
Android文档中有一个条目 - How do I pass data between Activities/Services within a single application?如果您谈论的是非持久性对象,您的选项将是:
顺便说一句,我并不完全理解你在对象和数据之间的区别。对象包含字段和一组使用它们的方法。但是,如果此对象具有某些方法并不重要,则它们不会成为其状态的一部分。如果传递一个对象,则只需要传递其状态,这样就可以使用序列化(通过Serializable或Parcelable接口)保存状态,然后将其恢复。
答案 2 :(得分:1)
如果您只是想找到一种在活动之间传递对象的方法,则可以覆盖Application类。
使用应用程序类的方法。
扩展应用程序类并将对象添加为其属性。在任何活动中,如果您调用以下代码,它将返回单个。
MyApplication appContext = (MyApplication) getApplication();
要完成此工作,您需要将其添加到清单文件的应用程序标记
android:name=".MyApplication"
此方法用于在应用程序周围传递值和对象。
答案 3 :(得分:0)
Parcelable是一个选项。它将从您的对象写入数据并从数据中创建一个新对象。它就像保存和加载数据一样。
看看http://developer.android.com/reference/android/os/Parcelable.html,看看你应该如何实现它。
答案 4 :(得分:0)
目前,我为目的地活动做了:
String className = getIntent().getStringExtra("com.myproject.ModelClass");
IModel model = (IModel)Class.forName(className).newInstance();
我在Activity中有一个特定的实现。