java - 如何确保此 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 来说太宽泛了,请指出更适合的方向
解决方案
推荐阅读
- excel - Excel 中的 DATEVALUE 问题
- python - mysql.connector 和常规 MySQL 中的精确查询不返回相同的结果
- javascript - 如何使用 HTML 单选按钮输入 (JS/jQuery) 更改 Highcharts 图形
- python - Google Analytics Reporting API,日期范围不起作用
- android - 无法解析具有“下载”权限的内容提供程序时,PackageInstaller 崩溃
- xamarin - 应用程序来自 xamarin 形式的背景后,信号 R 不起作用
- c++ - C++ 程序在没有管理员权限的情况下在后台运行
- javascript - 如何删除网址末尾的重复内容?
- snowflake-cloud-data-platform - 如何在雪花中查看时区
- android - 如何从 ANDROID DEVICE 对 FPGA 进行编程?请给我一个想法