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
}
}