【问题标题】:Getting intent and its extras, but not the intent of the activity that started the new activity获取意图及其附加功能,但不是启动新活动的活动的意图
【发布时间】:2011-08-07 15:14:07
【问题描述】:

当你即将开始一个新的活动,并且想要传递一个变量时,你通常这样做:

Intent intent = new Intent().setClass(this, NewActivity.class);
intent.putExtra("variable", variable);
startActivity(intent);

当您阅读额外内容时(在新活动中),您可以这样做:

Intent intent = getIntent();
if(intent != null)
{
    variable = intent.getIntArrayExtra("variable");
}

现在,在我的应用程序中,我有一个加载屏幕,所有加载都在其中进行。这是在主要活动中进行的。在此过程中,许多变量正在更新/更改。我还有许多其他活动,我需要将这些新更新的变量传递给其中一些活动。问题是这些活动不是由我的主要活动开始的。

有什么方法可以在我的主要活动中做到这一点:

Intent newIntent1 = new Intent().setClass(MainActivity.this, NewActivity1.class);
newIntent1.putExtra("var1", var1);

然后使用另一个活动中的startActivity(newIntent1); 开始活动?

我曾尝试像这样阅读额外内容:

Intent intent;
try
{
    intent = Intent.parseUri("content://com.mycompany.android.MainActivity", 0);
    if(intent != null)
    {
        var1 = intent.getIntArrayExtra("var1");
    }
}
catch (URISyntaxException e)
{
    e.printStackTrace();
}

这不起作用,var1 变量为空(这样初始化)。

说实话,我不知道该怎么做,也不知道Intent.parseUri 是如何工作的。对于像我这样的初学者来说,这方面的文档真的很糟糕。

【问题讨论】:

  • 在您开始的意图中,您是否试图从意图中读取值?创建? onNewIntent?
  • @Brandon Haugen:我正在尝试在 onCreate 方法中阅读它。
  • 你说activity不是你的mainactivity启动的,那么是谁启动的呢?关键是,如果这不是第一次启动活动,请尝试读取活动的 onNewIntent 方法中的值,而不是 onCreate

标签: android android-activity android-intent extra


【解决方案1】:

我还有许多其他活动,我需要将这些新更新的变量传递给其中一些活动。

不,你没有。

您需要编写一个真实的数据模型(数据库、内容提供者、静态数据成员中的 POJO)并让所有活动都引用该公共数据模型。

【讨论】:

  • 是的,看起来是这样,将继续使用数据库。
  • 对于可能与我最初遇到相同问题的其他人,我可以肯定地说使用数据库要容易得多。
【解决方案2】:

只使用广播来通知活动更改会更容易。

【讨论】:

  • 从没听说过广播,可以举个例子吗?检查了它的文档,但不太确定如何实现它。
  • 我已经看过那个网站,但是如果你要使用电话状态或类似的,这些例子很好。我只需要我自己的活动,我在其中找不到显示这一点的示例。
  • 在广播接收器示例中,从意图过滤器中删除“android.intent.action.PHONE_STATE”并将其替换为您的应用唯一的名称。要向接收者发送广播,请使用 Intent intent = new Intent("my.unique.string"); sendBroadcast(intent); 要向接收者发送更多信息,在 sendBroadcast() 之前,您可以 intent.putExtra("key", value); 使用任意数量的键/值对。
  • 谢谢,现在我可以访问接收器中的 onReceive 方法了。现在,如何在我的新活动中读取来自extra 的信息?
  • 接收者得到意图。检查 Intent 类的文档。有很多 get 方法可以获取额外内容。例如,要获得额外的字符串,您可以调用 intent.getStringExtra("key")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 2021-10-02
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
相关资源
最近更新 更多