主活动未更新意图返回

问题描述 投票:0回答:1

我正在开发一款游戏,我的主要活动(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();
    }
java android android-intent
1个回答
0
投票

在您的

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 方法已弃用,有什么替代方法?

© www.soinside.com 2019 - 2024. All rights reserved.