如何确保仅在必要时调整此recylerview?

时间:2019-02-06 01:37:39

标签: java android logic undo

我有一个程序,如果玩家连续三次输入“命中”,则该玩家又会获得三掷。如果他们错过了三分之一的掷球,则是他们完成第三次掷球后的下一个回合。

播放器转弯在RecylerView中排序。

用户可以撤消其先前的操作,从而可以正确调整其他统计信息。

我遇到的情况是,如果一名球员在缺席的情况下完成了三局比赛,则继续前进到下一名球员,而没有下一名球员投掷,则用户决定撤消此操作,因此程序将最后一行推到顶部RecylerView的

用户在回合之前撤消所有先前的掷出。我正在测试连续三击,+ 1击+两击。这很好。当此玩家的属性减少到0时,就会出现问题。排在下一位的玩家出现在顶部,但是当我尝试删除他们的统计信息时,它正在将另一位玩家移到顶部。我已经尝试解决了几个小时,并确定问题出在if语句中。

这是GIF格式中的问题:

enter image description here

我需要这个if语句,因为您可以看到gif来删除撤消操作开始时移回顶部的第一个玩家。我尝试将boolean放在代码中的不同位置,说“ recyler视图仅已调整-请勿触摸”

问题出在这里:

 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来说这是一个太宽泛的问题,请向我指出更合适的地方

0 个答案:

没有答案