Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确保此recylerview仅在必要时进行调整?_Java_Android_Logic_Undo - Fatal编程技术网

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

Java 如何确保此recylerview仅在必要时进行调整?,java,android,logic,undo,Java,Android,Logic,Undo,我有一个程序,如果玩家连续三次输入“命中”,玩家将获得三次以上的投掷。如果他们在三次投球中错过了一次,那么在他们完成第三次投球后,轮到下一个球员了 玩家回合在RecylerView中排序 用户可以撤消以前的操作,从而正确地调整其他统计信息 我遇到过这样一种情况,如果一个玩家完成了三次投掷,但丢失了一次,它将移动到下一个玩家,而没有下一个玩家投掷,用户决定撤消此操作,因此程序将最后一行带到RecylerView的顶部 用户撤消其回合的所有先前投掷。我正在测试连续三次命中,+1次命中+2次未命中。这

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

玩家回合在RecylerView中排序

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

我遇到过这样一种情况,如果一个玩家完成了三次投掷,但丢失了一次,它将移动到下一个玩家,而没有下一个玩家投掷,用户决定撤消此操作,因此程序将最后一行带到RecylerView的顶部

用户撤消其回合的所有先前投掷。我正在测试连续三次命中,+1次命中+2次未命中。这个很好用。当该玩家的属性减少到0时,问题就出现了。队伍中的下一个球员排到了榜首,但当我试图删除他们的统计数据时,它将另一个球员移到了榜首。我花了几个小时试图解决这个问题,发现问题在于if语句

以下是GIF格式的问题:

我需要这个if语句,正如您所看到的,gif将删除在撤消操作开始时被移回顶部的第一个播放器。我尝试在代码中的不同位置放置一个
布尔值
,表示“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();
                }
如果这是一个过于宽泛的问题,请告诉我哪里更合适