我可以从应用程序中的另一个Activity更新一个Activity中的数据成员吗?

时间:2010-08-11 22:27:21

标签: java android

我已经尝试了这个并且它有效,但我不知道这是不是坏事,因为活动之间的数据传输的所有帮助似乎都使用了意图。

在MainActivity中我有:

static PilotRecord pilotRecord = new PilotRecord(); //PilotRecord just contains data item declarations

在MainActivity.onCreate中:

pilotRecord.fuel = 100;

在MainActivity.onClick中:

Intent intent = new Intent(this, SubActivity.class);
startActivityForResult(intent, 0);

在SubActivity.onCreate中我有:

MainActivity.pilotRecord.fuel = 200;

在SubActivity.onClick中:

MainActivity.pilotRecord.fuel = 300;
setResult(RESULT_OK);
finish();

当我启动MainActivity时,燃油值为100

如果单击MainActivity,则会按预期显示SubActivity

如果单击SubActivity,将显示MainActivity,燃料值现在为300

如果按“返回”按钮,将显示MainActivity,燃料值现在为200

有没有人知道任何潜在的问题,因为对我来说似乎比设置意图等更简单。

  • 弗林克

2 个答案:

答案 0 :(得分:3)

据我了解,您所做的事情会导致数据丢失。

SubActivity不应该操纵调用它的活动的数据。我认为没有任何保证您的MainActivity存在......

系统可能会随时决定将其终止并在您的SubActivity表示已准备好返回MainActivity时重新启动它。

您应该传回捆绑中的数据,并让MainActivity根据结果修改其数据。

    Bundle stats = new Bundle();
    stats.putString("fuel","300"); 
    setResult(RESULT_OK, "PilotRecord", stats);
    finish();

另外,请记住,在MainActivity中调用onPause()时,应将“Fuel”级别保存到某种持久性存储。

我建议您仔细阅读documentation for Activity,因为实施正确的回调非常重要。

答案 1 :(得分:1)

如果您真的想破解它,请创建另一个包含所有需要共享的静态变量的类。