элементы не добавляются в список при переопределении equals и hashcode - PullRequest
0 голосов
/ 15 октября 2018

У меня есть класс, который содержит строковый идентификатор. Я пытаюсь переопределить равенства и хэш-код для моей модели, чтобы сделать равенство возвращает true или false, зависит от идентификатора.Я делаю это, потому что у меня есть список массивов этой модели, и мне нужно проверить, есть ли элемент в списке или нет, прежде чем добавить его.Проблема в том, что, когда новый элемент должен быть добавлен в список, он появляется в представлении рециркулятора, а затем быстро исчезает

, это мои уравнения и методы hashCode:

    @Override
public boolean equals(Object obj) {
    boolean isEqual = false;

    if (obj != null && obj instanceof Challenge) {
        isEqual = this.id.equals(((Challenge) obj).getId());
    }

    return isEqual;
}

@Override
public int hashCode() {
    return id.hashCode();
}

, и этокод, который получает данные:

    public String getChallengeData(DataSnapshot dataSnapshot, String tag) {
    Log.v("ChallengesFragPresenter", "get challenge data called");
    Log.v("ChallengesFragPresenter", "completedChallengesList : " + completedChallengesList.size()
            + ", uncompletedChallengesList " + uncompletedChallengesList.size());
    view.startCompletedChallengesAdapter(completedChallengesList);
    view.startUnCompletedChallengesAdapter(uncompletedChallengesList);

    GenericTypeIndicator<List<Question>> t = new GenericTypeIndicator<List<Question>>() {
    };
    challenge = new Challenge();
    String challengeDate = dataSnapshot.child("date").getValue().toString();
    String challengeSubject = dataSnapshot.child("subject").getValue().toString();
    String challengeState = dataSnapshot.child("state").getValue().toString();
    String challengeId = dataSnapshot.getKey();
    ArrayList challengeQuestionsList = (ArrayList) dataSnapshot.child("questionsList").getValue(t);
    long player1Score = (long) dataSnapshot.child("player1score").getValue();
    long player2Score = (long) dataSnapshot.child("player2score").getValue();

    String player1Name = dataSnapshot.child("player1Name").getValue().toString();
    String player1Image = dataSnapshot.child("player1Image").getValue().toString();
    String player1Uid = dataSnapshot.child("player1Uid").getValue().toString();
    String player2Name = dataSnapshot.child("player2Name").getValue().toString();
    String player2Image = dataSnapshot.child("player2Image").getValue().toString();
    String player2Uid = dataSnapshot.child("player2Uid").getValue().toString();

    String challengerName, challengerImage;

    if (player1Uid.equals(currentUserUid)) {
        currentPlayer = 1;
        challengerName = player2Name;
        challengerImage = player2Image;
        challenge.setSecondChallengerUid(player2Uid);//second means that it is not the player who starts the challenge
        if (tag.equals("onChildAdded")) {
            player1childrenCount++;
        }
    } else {
        currentPlayer = 2;
        challengerName = player1Name;
        challengerImage = player1Image;
        challenge.setSecondChallengerUid(player1Uid);//second means that it is not the player who starts the challenge
        if (tag.equals("onChildAdded")) {
            player2childrenCount++;
        }
    }
    challenge.setCurrentPlayer(currentPlayer);
    challenge.setChallengerName(challengerName);
    challenge.setDate(challengeDate);
    challenge.setImage(challengerImage);
    challenge.setSubject(challengeSubject);
    challenge.setState(challengeState);
    challenge.setId(challengeId);
    challenge.setQuestionsList(challengeQuestionsList);
    String score;
    if (currentPlayer == 1) {
        score = player2Score + " : " + player1Score;
    } else {
        score = player1Score + " : " + player2Score;
    }
    challenge.setScore(score);
    if (challenge.getState().equals("اكتمل")) {
        view.showCompletedChallengesTv();

        if (!completedChallengesList.contains(challenge)) {
            completedChallengesList.add(0, challenge);
            view.notifyAdapters(completedChallengesList.size(), uncompletedChallengesList.size());
        }

    } else if (challenge.getState().equals(refusedChallengeText)) {
        view.showCompletedChallengesTv();

        if (!completedChallengesList.contains(challenge)) {
            completedChallengesList.add(0, challenge);
            view.notifyAdapters(completedChallengesList.size(), uncompletedChallengesList.size());
        }

    } else if (challenge.getState().equals(uncompletedChallengeText)) {
        view.showUncompletedChallengesTv();

        if (!uncompletedChallengesList.contains(challenge)) {
            uncompletedChallengesList.add(0, challenge);
            view.notifyAdapters(completedChallengesList.size(), uncompletedChallengesList.size());
        }
    }

    return player1Uid;
}
...