首页 > 解决方案 > 如何确保此 recylerview 仅在必要时进行调整?

问题描述

我有一个程序,如果玩家连续三次输入“击球”,玩家将获得三次以上的投掷。如果他们在三投中没有投中一投,则在他们完成第三次投掷后轮到下一名球员。

玩家回合在 RecylerView 中排序。

用户可以撤消他们之前的操作,从而正确调整其他统计数据。

我有一种情况,如果一个玩家完成了他们的三个投掷而错过了一个,它会转移到下一个玩家,而没有下一个玩家投掷用户决定撤消这个动作,所以程序将最后一行带到 RecylerView 的顶部.

用户轮到他们撤消之前的所有投掷。我正在测试三个连续命中,+1 命中 + 2 次未命中。这工作正常。当这个玩家的统计数据减少到 0 时,问题就出现了。下一个玩家排在首位,但是当我尝试删除他们的统计数据时,它正在将另一个玩家移到顶部。我已经尝试解决这个问题几个小时,并确定问题出在 if 语句中。

这是GIF表单中的问题:

在此处输入图像描述

我需要这个 if 语句,正如您在 gif 中看到的那样,用于删除在撤消操作开始时移回顶部的第一个玩家。我尝试boolean在代码中的不同位置添加“回收器视图仅已调整 - 不要触摸”

这就是问题所在:

 else if (!accessPlayerHistoryThreeInARow.get(accessPlayerHistoryThreeInARow.size() - 1) && Integer.parseInt(amountThrown.get(0)) % 3 == 0 && !accessPlayerHistoryThreeInARow.isEmpty()) {
                previousAmountThrown = Integer.parseInt(amountThrown.get(amountThrown.size() - 1));
                amountThrown.set(amountThrown.size() - 1, String.valueOf(previousAmountThrown - 1));
                movePlayersInAdapter(apt_confirmedPlayers.size() - 1, 0); //Move to last element in adapter
                playerTurn = lastPlayerTurn;// AMOUNTTHROWN FOR P2 SHOWING AS MINUS 1 HERE IN INSPECTOR
                adjustListsToMatchTheAdapter(false);
                if(deleteTheHit) {
                    amountHitThisRound--;
                }
                adapter.notifyItemChanged(1); //Changes the items being moved to the correct color hides dart image
                if(!accessPlayerHistoryThreeInARow.isEmpty()) {
                    accessPlayerHistoryThreeInARow.remove(accessPlayerHistoryThreeInARow.size() -1);
                    listOfThreeInARow.get(playerTurn).clear();
                    listOfThreeInARow.get(playerTurn).addAll(accessPlayerHistoryThreeInARow);
                } else {
                    listOfThreeInARow.get(playerTurn).clear();
                }

每当第一个玩家统计数据被删除时,我希望程序到达的代码。这在 else 语句中遵循上述代码:

    else {
                Log.d("Result is empty", String.valueOf(!accessPlayerHistoryThreeInARow.isEmpty()));
                Log.d("value should be false", String.valueOf(accessPlayerHistoryThreeInARow.get(accessPlayerHistoryThreeInARow.size() - 1)));
                Log.d("value should be true", String.valueOf(Integer.parseInt(amountThrown.get(0)) % 3));
                if(deleteTheHit) {
                    previousAmountHit = Integer.parseInt(amountHit.get(0));
                    numToHit.set(0, String.valueOf(previousAmountHit));
                    amountHit.set(0, String.valueOf(previousAmountHit - 1));
                    amountHitThisRound--;
                }
                previousAmountThrown = Integer.parseInt(amountThrown.get(0));
                amountThrown.set(0, String.valueOf(previousAmountThrown - 1));
                if(!accessPlayerHistoryThreeInARow.isEmpty()) {
                    accessPlayerHistoryThreeInARow.remove(accessPlayerHistoryThreeInARow.size() -1);
                    listOfThreeInARow.get(playerTurn).clear();
                    listOfThreeInARow.get(playerTurn).addAll(accessPlayerHistoryThreeInARow);
                } else {
                    listOfThreeInARow.get(playerTurn).clear();
                }

如果这对 SO 来说太宽泛了,请指出更适合的方向

标签: javaandroidlogicundo

解决方案


推荐阅读