Как я могу гарантировать, что это recylerview корректируется только при необходимости? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть программа, в которой, если игрок трижды подряд вводит удар, игрок получает еще три броска.Если они пропускают один бросок из трех, это следующий ход игрока после того, как они закончили третий бросок.

Ходы игроков упорядочены в 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, пожалуйста, укажите мне, где более подходит

...