【问题标题】:Using correctly and cleanly onNewIntent() with setIntent()正确、干净地使用 onNewIntent() 和 setIntent()
【发布时间】:2020-05-27 11:27:14
【问题描述】:

我有 3 个活动(A、B、C),其中 2 个与意图通信。 这是调用顺序:A -> B -> C。 在活动 B 中,我使用intent.putExtra("key", gameMode) 启动活动 C。 首次启动活动C时,没有问题。但是如果 C 结束并且我回到 B 并更改 game_mode,则活动 C 总是读取第一个意图。 我知道这个问题会被问很多次,但是即使我尝试使用onNewIntent()(内部使用setIntent(intent)),或者甚至使用FLAG_ACTIVITY_CLEAR_TOP,它也不会改变任何东西...... 我想(我确定......)我是做错一切的人,但我正在寻求您的帮助以获得完整而清晰的答案。 目标是更新意图(或至少更新其附加内容)。我应该调用 onNewIntent() 方法,还是 Android 自己做?等等

非常感谢花时间回答我问题的人。

B 活动:

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

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MenuPrincipal.this, GameCard.class);
        intent.putExtra("key", gameMode);
        onNewIntent(intent);
        startActivity(intent);
    }
});

C 活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.some_layout);
    int gameMode;
    Bundle extras = getIntent().getExtras();
    if(extras != null) {
        gameMode = extras.getInt("key", 0);
    }
}

@Override
public void onBackPressed() {
    // do nothing.
    //default value : super.onBackPressed();
}

【问题讨论】:

  • putExtra()中的关键字int需要什么?
  • 无它是为了表明它是一个整数。我把它删除了。
  • 你能给我onBackPressed()的活动C
  • extras.getInt("key");试试这个而不是 extras.getInt("key", 0);

标签: android android-studio android-intent android-activity


【解决方案1】:

感谢 Ajay K S 设法找到了答案: 通过使用 extras.getInt("key"),应用程序可以完美运行(您可以毫无问题地阅读最后一个 - 而不仅仅是第一个 - 意图)。 另外,经过测试,也不需要自己调用onNewIntent(intent)方法来更新intent。似乎Android自己做这件事。 再次感谢!

【讨论】:

    猜你喜欢
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多