Посмотреть код можно в репозитории github.

Большой привет парням, создающим библиотеки для всего того, что Google продвигает, но пока не дает нам кода, но факт в том, что я предпочитаю не использовать эти библиотеки без крайней необходимости. Библиотека, которую вы включаете в свой проект, может делать намного больше, чем вам нужно, и с этим связана нагрузка на ваше драгоценное количество ограничений на методы, возможно, более длинные сборки, еще одна библиотека, которую вы и ваши коллеги должны держать в голове ...

На днях мне пришлось реализовать функцию «смахнуть, чтобы удалить». Мне это не очень понравилось, так как я считаю, что это не очень легко обнаружить и что такие действия, основанные на жестах, не должны быть единственным способом получить доступ к функции, но это уже другая история. Все еще помня, как сложно это было пару лет назад на ListView, я начал гуглить, и довольно скоро появился простой SO-пост с простым решением и лучшей частью - никакой сторонней библиотеки не требовалось! Однако в конце концов все оказалось не так просто.

Первая проблема, которая у меня возникла, заключалась в том, что происходит после смахивания? Конечно, я хотел бы нарисовать что-то под областью прокрутки, но как только представление было проведено и действие было выполнено, это было несколько неприятно: /

Я хотел просто нарисовать красный фон над пустым пространством, поскольку элементы анимируются в свои новые позиции, но я не мог сделать это внутри класса ItemTouchHelper. Для этого мне пришлось ввести еще один ItemDecorator. Результаты были удовлетворительными.

Мне было любопытно, смогу ли я легко реализовать опцию «отменить», аналогичную той, которую предоставляет приложение GMail. У меня была идея, как это сделать, и, конечно же, это сработало!

Но все время я видел странную проблему: когда я удалял строку, прокручивал ее и возвращался, строка над ранее удаленной строкой пропадала. Отладка показала, что это было x переведено за пределы экрана, как оказалось в результате считывания. Обратите внимание, как я удаляю элемент 2, но затем элемент 1 исчезает!

Я потратил несколько часов на эту проблему, на самом деле больше, чем я хотел бы признать. За это время я нашел несколько уловок, чтобы избавиться от этого, но не нашел подходящего решения. В конце концов оказывается, что это регрессивная ошибка в библиотеке поддержки recyclerview-v7, и ошибка исчезла в последней версии 3.1.1.

Вот и все, ребята!