9

我正在尝试Activity使用Intentwith extras 在实例之间传递少量文本。

每当我使用后退按钮或操作栏中的导航在它们之间导航时,这似乎都可以正常工作。但是,如果我访问主屏幕然后重新启动应用程序,传递的额外内容将被忽略;第二个Activity似乎使用旧的Intent,而不是新的。

相关代码:

源活动

public class ActivityA extends Activity {
    protected void goToResults(String results) {
        Intent intent = new Intent(this, ActivityB.class);
        intent.putExtra(Intent.EXTRA_TEXT, results);
        startActivity(intent);
    }
}

目的地活动

public class ActivityB extends Activity {
    @Override
    public void onResume() {
        super.onResume();
        Bundle extras = getIntent().getExtras();
        String results = extras.getString(Intent.EXTRA_TEXT);
        // etc
    }
 }

我尝试了许多不同的方法,包括:

intent.setAction("action-" + UNIQUE_ID);

(据我了解,Intent实例不按附加内容进行比较)

PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

(我不需要PendingIntent,但认为这可能会强制Intent更新)

Intent关于每次我从ActivityA->进行转换时如何强制显示更改的数据的任何建议ActivityB,无论我是使用后退按钮还是转移到主屏幕?

4

3 回答 3

21

我记得曾经遇到过这个问题,我们通过将 Intent.FLAG_ACTIVITY_CLEAR_TOP 添加到您发送的意图来解决它:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

或通过在您打算启动的活动中实施以下方法:

@Override
protected void onNewIntent(final Intent intent) {
        super.onNewIntent(intent);
        this.setIntent(intent);
}

我不是 100% 确定是什么再次修复了它,相信它正在添加 onNewIntent 方法。祝你好运,保持联系。

于 2013-10-22T23:24:57.040 回答
3

正如@Lauw 所说:

protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    this.setIntent(intent);
}

this.setIntent(intent);

这条线为我解决了这个问题。

于 2015-07-26T14:23:46.730 回答
0

还可以删除意图附加内容intent.removeExtra("key")可以帮助更新传入的新附加内容。

当我试图从应用程序 B 启动应用程序 A 时,这种方法对我的情况有所帮助。当应用程序 A 未打开时一切正常,但是当应用程序 A 已经打开时,我必须使用该removeExtra方法来获取更新。

于 2016-11-24T08:32:46.793 回答