Соблюдайте содержимое ArrayDeque - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть MutableLiveData типа ArrayDeque. Я пытаюсь это наблюдать. Он работает, когда я впервые присваиваю ему значение (создаю ArrayDeque), но я пытаюсь наблюдать за изменениями содержимого, т. Е. При добавлении новых записей или при удалении записей.

var moveHistory = MutableLiveData<ArrayDeque<Move>>()

..

    moveHistory.value = ArrayDeque<Move>()  <<--- this fires
    moveHistory.value?.addFirst(MontanaMoveStandard(from, to)) <<- this doesn't fire

это мой код наблюдения:

        moveHistory.observe(this, Observer {
            moveHistory -> undoButton?.isEnabled = moveHistory.size > 0
    })

1 Ответ

0 голосов
/ 02 апреля 2019

Это то, что я сделал в конце концов.

Я создал свой собственный класс MoveHistory, который расширяет MutableLiveData и выполняю действия над этим. Я добавил к нему методы, которые я использую (addFirst и pollFirst), а затем переназначил значение самому себе, как предложено Luksprog

Это класс, которым я закончил:

class MoveHistory(): Serializable, MutableLiveData<ArrayDeque<Move>>(){
    init {
        value = ArrayDeque<Move>()
    }

    fun addFirst(move: Move) {
        value?.addFirst(move)
        value = value
    }
    fun pollFirst(): Move {
        var move = value?.pollFirst()
        value = value
        return move!!
    }
}

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

...