Я разрабатываю игру, в которой моим основным занятием (GameActivity) являются прятки. Затем есть второе действие (InventoryActivity), где игроки могут использовать предметы, влияющие на их характеристики (например, количество очков жизни). Я могу получить очки жизни текущего игрока во втором действии и изменить их, если он использует предмет из своего инвентаря. Проблема возникает, когда я заканчиваю второе действие: очки жизни не отправляются в основное действие.
Я думаю, что это проблема намерения, которое не возвращается должным образом в основное действие. p>
Чтобы получить информацию для моего второго действия, я сделал следующее в своем основном действии:
@Override
protected void onActivityResult(int requestCode , int resultCode, данные намерения @Nullable) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1001 && resultCode == RESULT_OK && data != null) {
ArrayList itemsFound = data.getParcelableArrayListExtra("ITEMS_FOUND");
ArrayList 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 itemsFound = new ArrayList(); Item lastItemAdded = currentPlayer.getLastItemAdded(); if (lastItemAdded != null) { itemsFound.add(lastItemAdded); } ArrayList 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();
}
Подробнее здесь: https://stackoverflow.com/questions/782 ... nt-returns
Основное действие не обновляет результаты намерений ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение