获取意图及其附加信息,但不获取启动新活动的活动的意图

3

当你要开始一个新的活动,并想传递一个变量时,通常只需执行以下操作:

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);。我尝试按以下方式读取extra:

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变量是空的(初始化为null)。

说实话,我不知道如何做到这一点,或者Intent.parseUri如何工作。对于像我这样的初学者来说,文档真的很糟糕。


你在哪个意图中尝试从意图中读取值?是在onCreate还是onNewIntent中? - Brandon Haugen
@Brandon Haugen:我正在尝试在onCreate方法中读取它。 - gosr
你说这些活动不是由你的主活动启动的,那么是谁启动它们的?关键是,如果这不是第一次启动活动,请尝试在活动的onNewIntent方法中读取值,而不是在onCreate方法中。 - Brandon Haugen
2个回答

1
我有许多其他的活动,我需要将这些新更新的变量传递给其中一些活动。
不,你不需要这样做。
你需要编写一个真正的数据模型(数据库、内容提供者、静态数据成员中的POJO),并让所有活动都引用该共同的数据模型。

是的,看起来是这样,我们会继续使用数据库。 - gosr
对于可能遇到与我最初一样问题的其他人,我可以肯定地说,使用数据库要容易得多。 - gosr

0

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


我以前从未听说过广播,你能举个例子吗?我查了一下文档,但不太确定如何实现它。 - gosr
在广播接收器示例中,从意图过滤器中删除“android.intent.action.PHONE_STATE”,并将其替换为您的应用程序唯一名称。要向接收器发送广播,请使用Intent intent = new Intent("my.unique.string"); sendBroadcast(intent);。在sendBroadcast()之前,如果要向接收器发送更多信息,则可以使用intent.putExtra("key", value);添加任意数量的键/值对。 - Earl
谢谢,现在我可以到达接收器中的onReceive方法了。现在,我该如何在我的新活动中读取extra中的信息? - gosr
是的,但我不想阅读onReceive方法中的额外信息(甚至不在Broadcast类中)。例如,在另一个类中,我需要启动某个已添加了一些extra的活动。我会这样做:Intent newIntent1 = new Intent("com.myapplication.android.NewActivity1"); 然后接着 startActivity(newIntent1);。然后,在这个新的活动中,我会按照我的原始帖子顶部所示来读取额外的信息。但这并不起作用... - gosr
我强烈建议您重新考虑您的方法。将信息传递给您无法直接访问的对象的方法是通过消息。讨论已经太长了...祝好运。 - Earl
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接