【问题标题】:Sharing Variables Across Different Activities In Android Studio在 Android Studio 中跨不同活动共享变量
【发布时间】:2016-03-07 20:52:32
【问题描述】:

我有一个名为 Main2Activity 的 Activity,它由一个变量“double result1”组成,该变量设置为等于一个表达式。它看起来像这样:

double result1 = n1 * 2 - 29;(其中 n1 是用户给出的输入)

我正在尝试在另一个名为 MainActivityEnd 的类中使用此变量。我试过这个:

double finalResult = Main2Activity.result1 * 4;

当我使用 setText 在 Main2Activity 中打印 result1 时,它会打印正确的值。

但是当我使用setTextMainActivityEnd 中打印finalResult 时,它总是打印0.0

这是有原因的吗?

感谢您的帮助!

【问题讨论】:

  • 您可能希望显示您尝试过的实际代码。
  • 传递你的双重意图来开始你的活动
  • 要么在用于启动其他 Activity 的 Intent 中传递变量,要么使用 SharedPreferences。
  • 谢谢大家的帮助!

标签: android class variables global sharing


【解决方案1】:

如果活动在同一流程中,则应使用以下 Android 方式 - 意图。简而言之,Intent 是 Android 在 Activity 之间按顺序启动时更改其值的方式。

所以你应该在 Main2Activity 中执行以下操作:

Intent intent = new Intent(Main2Activity.this, MainActivityEnd.class);
intent.putExtra("name", variable);
startActivity(intent);

Main2Activity 从哪里开始 MainActivityEnd。 Intent 填充了 MainActivityEnd 需要的数据,在这种情况下是“变量”。

之后你应该像这样在 MainActivityEnd onCreate() 方法中捕获 Intent:

Intent intent = getIntent();
double finalResult = intent.getDoubleExtra("name", 0);

其中“name”与 Main2Activity 中给出的名称相同,如果 Main2Activity 中的 Intent 没有附加双精度值,则 0 是默认值。

这是这种行为在 Android 中最常见的用法。

【讨论】:

    【解决方案2】:

    使用IntentsSharedPreferences,就像其他人在这里已经提到的那样。

    但是,如果您打算放置一些全局逻辑(如方法),请使用 Application 类。

    你可以像这样扩展 Application 类:

    public class YourApplication extends Application {
        public double result1 = 29;
    }
    

    然后在您的任何活动中:

    YourApplication app = (YourApplication) this.getApplication();
    System.out.printl(app.result1);
    

    确保您正确命名了您的应用程序类,它应该是[YOUR_APP_NAME]Application。并且不要忘记将您的新应用程序类放入manifest

    <application 
        android:name=".YourApplication"
    

    【讨论】:

    • 这是一种可怕的方法。您应该改用 SharedPreferences。
    • 这有两种方式可以咬你:Android 会杀死你的进程,然后重新创建你的活动,并发现全局状态未初始化;或者当您的最后一个活动完成时,Android 不会终止您的进程,并且全局状态会延续到应用程序的下一次启动。全局状态是邪恶的,但在 Android 上尤其邪恶。
    • @KevinKrumwiede 如果您想为您的逻辑(方法)提供一个全局位置,是否有扩展应用程序的替代方法?
    • 如果你必须使用全局状态,把它放在Application 并不比把它放在其他地方差。请注意它如何导致问题。请注意Application 实例的成员与static 全局成员有细微的不同。在实践中,Application 实例与进程和 VM 具有相同的生命周期,因此与 static 字段具有相同的生命周期,但 AFAIK 没有记录,因此可能会在没有警告的情况下更改。
    猜你喜欢
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多