Android: обнаружение удаленного элемента в ObservableList

Я использую ObservableList в моей модели для привязки. Когда элемент удален из ObservableList, я хочу знать, какой элемент был удален. Так что я использую ObservableList.OnListChangedCallback,

Когда элемент удален, он будет вызван onItemRangeRemoved(), Но проблема в том, что элемент был удален из ObservableList в onItemRangeRemoved(),

catDatas.addOnListChangedCallback(new ObservableList.OnListChangedCallback<ObservableList<CatData>>()
{
    @Override
    public void onChanged(ObservableList<CatData> sender)
    {
    }
    @Override
    public void onItemRangeChanged(ObservableList<CatData> sender, int positionStart, int itemCount)
    {
    }
    @Override
    public void onItemRangeInserted(ObservableList<CatData> sender, int positionStart, int itemCount)
    {
    }
    @Override
    public void onItemRangeMoved(ObservableList<XROrderItemData> sender, int fromPosition, int toPosition, int itemCount)
    {
    }
    @Override
    public void onItemRangeRemoved(ObservableList<CatData> sender, int positionStart, int itemCount)
    {
        for (int idx = itemCount - 1; idx >= 0; idx--)
        {
            CatData data = sender.get(idx + positionStart);  //this line will throw index out of bounds exception
            ...
            ...
            ...
            uninitData(data);
        }
    }
});

Любая идея, как захватить элементы, которые удалены?

Спасибо...

1 ответ

Люди в Google пропустили метод removeAll(), поэтому он не уведомляет наблюдателей. Чтобы исправить это, используйте этот пользовательский класс:

class MyObservableArrayList<T>: ObservableArrayList<T>() {

    override fun removeAll(elements: Collection<T>): Boolean {
        var success = false
        elements.forEach { if (super.remove(it)) success = true }
        return success
    }

}
Другие вопросы по тегам