代码之家  ›  专栏  ›  技术社区  ›  FrinkTheBrave

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

  •  1
  • FrinkTheBrave  · 技术社区  · 14 年前

    在主要活动中,我有:

    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中单击,则会如预期的那样显示子活动

    如果单击子活动,则会显示MainActivity,此时燃油值为300

    如果按后退按钮,将显示MainActivity,此时燃油值为200

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

    • 弗林克
    2 回复  |  直到 14 年前
        1
  •  3
  •   Timothy Lee Russell    14 年前

    据我所知,您所做的将导致数据丢失。

    子活动不应操纵调用它的活动的数据。我不认为有任何保证,你的主要活动甚至存在。。。

    系统可能会决定随时终止它,并在子活动发出准备返回主活动的信号时重新启动它。

    您应该在一个bundle中传回数据,并让MainActivity根据结果修改其数据。

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

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

    我建议你读一下 documentation for Activity

        2
  •  1
  •   Jack    14 年前

    如果你真的想破解它,可以创建另一个类来保存所有需要共享的静态变量。