我正在开发一款游戏,我的主要活动(GameActivity)是捉迷藏。然后是第二个活动(InventoryActivity),玩家可以使用影响其特性(例如生命值)的物品。我能够在第二个活动中检索当前玩家的生命值,并在他使用库存中的物品时修改它们。当我完成第二个活动时,问题就出现了:生命值没有发送到主要活动。
我认为这是一个意图没有正确返回到主要活动的问题。
为了检索第二个活动的信息,我在主要活动中执行了以下操作:
@覆盖 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1001 && resultCode == RESULT_OK && data != null) {
ArrayList<Item> itemsFound = data.getParcelableArrayListExtra("ITEMS_FOUND");
ArrayList<Item> playerInventory = data.getParcelableArrayListExtra("PLAYER_INVENTORY");
int updatedHearts = data.getIntExtra("CURRENT_PLAYER_HEARTS", 0); // Récupérer les points de vie mis à jour
currentPlayerIndex = data.getIntExtra("CURRENT_PLAYER_INDEX", 0); // Mettre à jour l'indice du joueur actuel
Player modifiedPlayer = data.getParcelableExtra("CURRENT_PLAYER"); // Récupérer le joueur mis à jour
if (modifiedPlayer != null) {
for (int i = 0; i < allPlayers.size(); i++) {
Player currentPlayer = allPlayers.get(i);
if (currentPlayer.getName().equals(modifiedPlayer.getName())) {
allPlayers.set(i, modifiedPlayer);
updateHeartsDisplay(modifiedPlayer.getHearts());
Log.d("GameActivity", "Joueur mis à jour : " + modifiedPlayer.getName() + ", Points de vie : " + modifiedPlayer.getHearts());
break;
}
}
}
}
} `
要使用意图启动库存活动,我使用了以下内容:
`private void launchInventoryActivity(Player currentPlayer) { // Prepare data for inventory activity ArrayList<Item> itemsFound = new ArrayList<>(); Item lastItemAdded = currentPlayer.getLastItemAdded(); if (lastItemAdded != null) { itemsFound.add(lastItemAdded); } ArrayList<Item> playerInventory = new ArrayList<>(); playerInventory.addAll(currentPlayer.getItems()); Intent inventoryIntent = new Intent(GameActivity.this, InventoryActivity.class); inventoryIntent.putParcelableArrayListExtra("ITEMS_FOUND", itemsFound); inventoryIntent.putParcelableArrayListExtra("PLAYER_INVENTORY", playerInventory); inventoryIntent.putExtra("CURRENT_PLAYER", currentPlayer); // Add logs to verify data sent to InventoryActivity inventoryLauncher.launch(inventoryIntent); }`
最后,在我的次要活动中,我将玩家的信息(及其修改后的生命值)返回到我的主要活动;
private void finishTurn() {
int currentPlayerIndex = getIntent().getIntExtra("CURRENT_PLAYER_INDEX", 0);
Intent intent = new Intent();
intent.putExtra("CURRENT_PLAYER_HEARTS", currentPlayer.getHearts());
intent.putExtra("CURRENT_PLAYER_INDEX", currentPlayerIndex + 1);
intent.putExtra("CURRENT_PLAYER", currentPlayer);
setResult(RESULT_OK, intent);
finish();
}
在您的
launchInventoryActivity
中,您没有使用startActivityForResult启动意图,因此它永远不会进入onActivityResult方法。
您的启动活动方法应如下所示:
private void launchInventoryActivity(Player currentPlayer) {
//...
// remove this line
inventoryLauncher.launch(inventoryIntent);
// change it for this
startActivityForResult(inventoryIntent, REQUEST_CODE);
}
考虑到
startActivityForResult
它已被弃用,onActivityResult
也是如此
更多信息在这里:OnActivityResult 方法已弃用,有什么替代方法?