【问题标题】:How do I change an activities's boolean values or other variable values in another activity?如何更改活动的布尔值或另一个活动中的其他变量值?
【发布时间】:2015-08-10 22:38:56
【问题描述】:

所以我在活动 A 中有一个布尔值设置为 false。然后,在另一个活动中,我想将该值更改为 true。然后,当我按下返回按钮回到活动 A 时,该布尔值现在为真,它在 onCreate 中运行。

这就是我的意思,活动 A

private static boolean newCardcheck = false;

 @Override
protected void onCreate(Bundle savedInstanceState)
{ 

}


public static void setNewCardcheck() {
    newCardcheck = true;
}


@Override
public void onResume() {
    super.onResume();
   if(newCardcheck)
    {
        Toast.makeText(this,"hey everyone",Toast.LENGTH_SHORT).show();
    }
    else
    {
        alfunction();
        sendCards(storeCards);
    }

}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(requestCode == RESULT_LOAD_IMAGE)
    {
        newCardcheck = true;
    }
}

活动 B:

@Override
public void onBackPressed()
{
    MyActivity.setNewCardcheck();
    super.onBackPressed();
    setResult(Activity.RESULT_OK, getIntent());
    finish();
}

所以当我回击时,我希望 newCardcheck 为真并运行“if”语句而不是 else 语句。

希望大家帮忙。

谢谢。

我还尝试将 setNewCard() 方法放在 onClick 中,它也不起作用。

【问题讨论】:

  • 当您导航回第一个活动时,onCreate(...) 可能不会再次运行。你应该把这个条件放在onResume()
  • @Kevin,你指的是哪个条件?
  • if(newCardcheck) ...

标签: android android-activity boolean boolean-logic


【解决方案1】:

最好的方法是通过 SharedPreferences。 SharedPreferences 会将您的数据写入应用程序 apk 中键/值中的私有文件,即使您关闭设备,该文件也会保留。

您可以像这样在 onCreate 中初始化 SharedPreferences:SharedPreferences sharedPreferences = getSharedPreferences(getPackageName(), MODE_PRIVATE)。

要存储一个值,只需调用:sharedPreferences.edit().putString("myKey", stringValue).commit();

要从应用程序的任何位置检索该值,请初始化 SharedPreferences,然后使用以下代码:String myData = sharedPreferences.getString("myKey");

如果有帮助,请告诉我!

编辑:您可能还想研究从 Intent 中获取结果。见Getting a Result from an Activity。如果您需要布尔值是持久的(即:写入存储并在重新启动时可用),请使用 SharedPreferences,否则您可能需要尝试 onActivityResult。

编辑2:

尝试在 Activity A 中覆盖 onActivityResult,如下所示:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode == RESULT_OK) {
            myBoolean = true;
        }
}

然后在Activity B中尝试

setResult(Activity.RESULT_OK, getIntent()); finish();

这是将数据传入和传出活动的标准方式。查看我上面的链接,了解如何从活动中获取结果以更深入地研究。

【讨论】:

  • 我也是这么想的。使用共享偏好。
  • 我是这么想的。所以最初我设置 newCardCheck = false;然后我将其存储在首选项中。我的问题出在另一个活动中,如果我调用该偏好并将其中的值更改为 true,然后返回活动 A,if 语句会运行吗?
  • 在活动 A 中覆盖 onResume 并将您的布尔逻辑放入其中。您可以在 Google 的文档中阅读有关 Activity Lifecycle 的更多信息。
  • 是否调用了 onResume?
  • 观察 1) 你忘记了那个吐司的.show()。让我再多看一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 2021-01-20
  • 2016-03-23
  • 1970-01-01
相关资源
最近更新 更多