Почему метод от презентатора может сработать дважды, так как вызов из обратного вызова только один раз (EventBus) - PullRequest
0 голосов
/ 28 января 2020

Я получил tablayout с 2 фрагментами. Когда 1-й фрагмент go при возобновлении работы, мы видим следующий поток

ActivityCallMethod -> PresenterCallMethod -> RepositoryCallMethod -> repositorySendCallBackToPresenter -> EventInPresenterTriggerAndCallMethodFromView --Маршрутизатор_данных_данных_данных_перечисления_объявления_перечисления_объявления_произведения_перечисления_произведения_перечисления_произведения_перечисления_произведения_перечисления_объекты_произведения_представления_представления_произведения_переключения_объявления_произведения_презентации_Презентация_Презентация_Презентация_Ма_изображения_Представления_Презентация_объект_Презентация_вход_Презентации > ViewCallItsMethod (andDuplicateData)

Когда фрагмент начинает работать в первый раз, его метод не вызывается дважды от презентатора.

Так почему нет двойного обратного вызова из репозитория, но по какой-то причине презентатор срабатывает дважды?

ActivityCode

@Override
public void addRealUsers(List<OnlineUser> onlineUsers) {
    mAdapter.addUsers(onlineUsers);
}

PresenterCode

ublic class OnlineUsersPresenter {

private OnlineUsersInteractor mInteractor;
private OnlineUsersView mView;

public OnlineUsersPresenter(OnlineUsersInteractor mInteractor, OnlineUsersView view) {
    this.mInteractor = mInteractor;
    this.mView = view;
}

/**
 * Get the real list of the users
 */
@Subscribe
public void inflateReaUserList(RealUsersListEvent event) {
    mView.addRealUsers(event.getRealUserList());
}

RepositoryCode

query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.hasChildren()) {

                    List<OnlineUser> newUser = new ArrayList<>();
                    for (DataSnapshot userSnapShot : dataSnapshot.getChildren()) {
                        newUser.add(userSnapShot.getValue(OnlineUser.class));
                    }
                    last_node = newUser.get(newUser.size() - 1).getUid();
                    last_rating = newUser.get(newUser.size() - 1).getRating();
                    if (!last_node.equals(last_key)) {
                        newUser.remove(newUser.size() - 1);
                    } else {
                        last_node = "end";
                        isMaxData = true;

                    }

                    isLoading = false;
                    EventBus.getDefault().post(new RealUsersListEvent(newUser));
                } else {
                    isLoading = false;
                    isMaxData = true;
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });

EventCode

List<OnlineUser> userList;

public RealUsersListEvent(List<OnlineUser> realUsersList) {
    this.userList = realUsersList;
}

public List<OnlineUser> getRealUserList() {
    return userList;
}

public void setRealUserList(List<OnlineUser> cardList) {
    this.userList = cardList;
}

И как я проверял использование этого события только в одном месте. В пользовательском репозитории

...