正确干净地使用 onNewIntent() 和 setIntent()
Using correctly and cleanly onNewIntent() with setIntent()
我有 3 个活动(A、B、C),其中 2 个与意图进行交流。
这是调用顺序:A -> B -> C。
在activityB中,我用intent.putExtra("key", gameMode)
启动activityC。
activityC 第一次启动时没有问题。但是如果 C 结束并且我回到 B 并更改 game_mode,activity C 总是读取第一个意图。
我知道这个问题会被问很多次,但即使我尝试使用 onNewIntent()
(内部使用 setIntent(intent)
),甚至使用 FLAG_ACTIVITY_CLEAR_TOP
,它也不会改变任何东西......
我想(我敢肯定...)我是做错事的人,但我正在寻求您的帮助以获得完整而明确的答案。
目标是更新意图(或至少它的附加功能)。我应该调用 onNewIntent() 方法,还是 Android 自己调用?等等
非常感谢花时间回答我问题的人。
B activity :
@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 activity :
@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();
}
感谢 Ajay K S 找到了答案:
通过使用 extras.getInt("key"),应用程序可以完美运行(您可以毫无问题地阅读最后一个 - 而不仅仅是第一个 - 意图)。
还有,经过测试,不需要自己调用onNewIntent(intent)方法来更新intent。似乎 Android 自己做了这个。
再次感谢!
我有 3 个活动(A、B、C),其中 2 个与意图进行交流。
这是调用顺序:A -> B -> C。
在activityB中,我用intent.putExtra("key", gameMode)
启动activityC。
activityC 第一次启动时没有问题。但是如果 C 结束并且我回到 B 并更改 game_mode,activity C 总是读取第一个意图。
我知道这个问题会被问很多次,但即使我尝试使用 onNewIntent()
(内部使用 setIntent(intent)
),甚至使用 FLAG_ACTIVITY_CLEAR_TOP
,它也不会改变任何东西......
我想(我敢肯定...)我是做错事的人,但我正在寻求您的帮助以获得完整而明确的答案。
目标是更新意图(或至少它的附加功能)。我应该调用 onNewIntent() 方法,还是 Android 自己调用?等等
非常感谢花时间回答我问题的人。
B activity :
@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 activity :
@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();
}
感谢 Ajay K S 找到了答案: 通过使用 extras.getInt("key"),应用程序可以完美运行(您可以毫无问题地阅读最后一个 - 而不仅仅是第一个 - 意图)。 还有,经过测试,不需要自己调用onNewIntent(intent)方法来更新intent。似乎 Android 自己做了这个。 再次感谢!