如果我有3个班级:MainActivity
,SecondActivity
,A
。
请在下面查看我的伪代码。 我想知道如何将对象从一种活动传递到另一种活动。 到目前为止,我发现的每个解释都涉及传递对象,以便在第二个活动中打印。但是,我需要使用其方法更改其值。 A类不能是静态类。 请告知这样做的最佳方法是什么。
class MainActivity {
A a1 = new A();
A a2 = new A();
}
class A {
double a;
setA(...){...};
getA(...){...};
}
class SecondActivity {
EditText b1; //data is saved in Shared Preference
double c1 = Double.parseDouble(b1); //convert from string to double in short
a1.setA(c1); //how to access instance a1?
}
答案 0 :(得分:2)
您可以使用单例来容纳A
的一些实例。如果您有要在不同的活动之间始终保持在应用会话中的数据,则不能可靠地将其存储在活动中(活动可以在后台被杀死并重新创建)。
例如,以下是在地图中保存任意数量的唯一实例的方法:
static class AHolder {
private static AHolder instance;
static AHolder getInstance() {
if( instance == null ) {
instance = new AHolder();
}
return instance;
}
private AHolder() {}
private HashMap<String,A> myCollection = new HashMap<>();
void addA(String key, A val) {
myCollection.put(key,val);
}
boolean hasA(String key) {
return myCollection.containsKey(key);
}
A getA(String key) {
return myCollection.get(key);
}
}
然后在MainActivity
中,您可以通过以下方式添加A
的实例
AHolder ah = AHolder.getInstance();
if(!ah.hasA("A1") ) {
ah.addA("A1",new A());
}
if(!ah.hasA("A2") ) {
ah.addA("A2",new A());
}
A a1 = ah.getA("A1");
A a2 = ah.getA("A2");
并在其他活动中可以访问和编辑它们
AHolder ah = AHolder.getInstance();
A a1 = ah.getA("A1");
A a2 = ah.getA("A2");
答案 1 :(得分:0)
Singleton是一种选择。您可以使用可序列化和可拆分的接口,并通过意图将数据从一个活动传递到注释者。