将对象从一项活动传递到另一项活动以更改其值

时间:2018-07-27 21:08:25

标签: java android object

如果我有3个班级:MainActivitySecondActivityA

请在下面查看我的伪代码。 我想知道如何将对象从一种活动传递到另一种活动。 到目前为止,我发现的每个解释都涉及传递对象,以便在第二个活动中打印。但是,我需要使用其方法更改其值。 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?
}

2 个答案:

答案 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是一种选择。您可以使用可序列化和可拆分的接口,并通过意图将数据从一个活动传递到注释者。