Java 如何确保此recylerview仅在必要时进行调整?
我有一个程序,如果玩家连续三次输入“命中”,玩家将获得三次以上的投掷。如果他们在三次投球中错过了一次,那么在他们完成第三次投球后,轮到下一个球员了 玩家回合在RecylerView中排序 用户可以撤消以前的操作,从而正确地调整其他统计信息 我遇到过这样一种情况,如果一个玩家完成了三次投掷,但丢失了一次,它将移动到下一个玩家,而没有下一个玩家投掷,用户决定撤消此操作,因此程序将最后一行带到RecylerView的顶部 用户撤消其回合的所有先前投掷。我正在测试连续三次命中,+1次命中+2次未命中。这个很好用。当该玩家的属性减少到0时,问题就出现了。队伍中的下一个球员排到了榜首,但当我试图删除他们的统计数据时,它将另一个球员移到了榜首。我花了几个小时试图解决这个问题,发现问题在于if语句 以下是GIF格式的问题: 我需要这个if语句,正如您所看到的,gif将删除在撤消操作开始时被移回顶部的第一个播放器。我尝试在代码中的不同位置放置一个Java 如何确保此recylerview仅在必要时进行调整?,java,android,logic,undo,Java,Android,Logic,Undo,我有一个程序,如果玩家连续三次输入“命中”,玩家将获得三次以上的投掷。如果他们在三次投球中错过了一次,那么在他们完成第三次投球后,轮到下一个球员了 玩家回合在RecylerView中排序 用户可以撤消以前的操作,从而正确地调整其他统计信息 我遇到过这样一种情况,如果一个玩家完成了三次投掷,但丢失了一次,它将移动到下一个玩家,而没有下一个玩家投掷,用户决定撤消此操作,因此程序将最后一行带到RecylerView的顶部 用户撤消其回合的所有先前投掷。我正在测试连续三次命中,+1次命中+2次未命中。这
布尔值
,表示“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();
}
如果这是一个过于宽泛的问题,请告诉我哪里更合适