Нет, по крайней мере, я не нашел, что Android может сообщить мне, если есть новые или удаленные элементы. Я сделал что-то подобное, когда элементы ListView оживили их новые позиции, и я сам должен был отслеживать их позиции.
Для вашего варианта использования, вероятно, проще положить анимацию замирания непосредственно перед удалением строки из базы данных. Поэтому, где бы вы ни находились в своем коде, вы удаляете строку из базы данных и запускаете обновление, вы делаете анимацию затухания над элементом и по завершении анимации вы удаляете строку и запускаете обновление.
Update
Ммм, я прочитал слишком быстро. Ваш пример не является постепенным исчезновением удаленных элементов, а является затуханием новых элементов.
Вам придется отслеживать идентификаторы элементов самостоятельно в своем адаптере. Этот подход может работать только в том случае, если у вас есть ограниченное количество элементов для показа, потому что список предыдущих идентификаторов элементов должен быть сохранен в памяти. Если вы не можете быть уверены, что список никогда не слишком велик, вам нужно будет найти способ добавить информацию «новизны» к самому курсору.
Позвольте мне посмотреть, смогу ли я что-нибудь приготовить. Попозже ...
Update 2
Ниже SimpleCursorAdapter, который отслеживает вещи ID от предыдущего курсора. В getView()
он запускает анимацию затухания, если запрашиваемый вид предназначен для элемента, который раньше не присутствовал.
private static class FadeInAdapter extends SimpleCursorAdapter {
private List<Long> previousItemIds = new ArrayList<Long>();
private FadeInAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View result = super.getView(position, convertView, parent);
// check if this view is for an item that is new
long itemId = getItemId(position);
if (!previousItemIds.contains(itemId)) {
// do the fade-in animation
result.setAlpha(0);
result.animate().alpha(1).setDuration(500).start();
}
return result;
}
@Override
public void changeCursor(Cursor cursor) {
Cursor oldCursor = getCursor();
if (oldCursor != null) {
// store previous item IDs to check against for newness with the new cursor
final int idColumnIndex = oldCursor.getColumnIndexOrThrow(DatabaseContract._ID);
previousItemIds.clear();
for (oldCursor.moveToFirst(); !oldCursor.isAfterLast(); oldCursor.moveToNext()) {
previousItemIds.add(oldCursor.getLong(idColumnIndex));
}
}
super.changeCursor(cursor);
}
}
Вопрос заключается в том, как настроить различные анимации для разных изменений. –
Основываясь на ответе на ссылку, я думаю, вы можете применить другую анимацию к различным элементам строки на основе индекса. @Sufferer – antonio081014