Нет, это неправильно. Прежде всего, вы не можете ссылаться на позицию, переданную в onBindViewHolder после возврата этого метода. RecyclerView не перепривязывает вид при изменении его положения (из-за перемещения предметов и т. Д.).
Вместо этого вы можете использовать ViewHolder#getPosition()
, который вернет вам обновленную позицию.
Если вы это исправите, ваш код перемещения должен работать & amp; обеспечить хорошую анимацию.
Вызов notifyDataSetChanged
предотвратит предсказательную анимацию, поэтому избегайте ее как можно дольше. Подробности см. В документации .
Редактировать (из комментария): чтобы получить положение извне, возьмите держатель дочернего вида из списка переработчика, а затем получите положение из vh. См. RecyclerView API для деталей
Это зависит от того, что вы подразумеваете под «коммерческим продуктом». Если вы используете код GPL, ваш код попадает под действие GPL, и вы не можете предоставить для него лицензию, которая снимает ограничения лицензии GNU. Это не означает, что вы не можете продавать продукт, но это означает, что вы должны предоставить своим лицензиатам по запросу его исходный код.
Как обычно, IANAL, но:
Если вы используете программный модуль под лицензией GPL, ваше программное обеспечение будет подпадать под определение «производной работы» и, следовательно, также будет лицензировано под GPL.
Вы захотите просмотреть точное определение «производной работы», тем не менее.
Если вы не поставляете программное обеспечение под лицензией GPL вместе с вашим продуктом, я думаю, у вас все в порядке.
Использование GPL в коммерческом продукте - очень сложный вопрос. Во времена GPLv2 существовала серая зона, которая была очень тщательно очищена в GPLv3. Чтобы предоставить подробную информацию, вы должны сообщить нам, какой модуль вы используете и к какой версии GPL он подпадает.
Все сводится к тому, «является ли ваш код производным от модуля GPL». Приведу глупый пример. Если модуль GPL - это пузырьковая сортировка, а ваше приложение использует API модуля, это производная работа, поэтому все подпадает под GPL. Если вы создаете веб-сервис вокруг модуля, веб-сервис является GPL, но все, что использует веб-сервис, нет. В еще более серой зоне, если у вас есть старый код, использующий другой алгоритм сортировки, и вы создаете слой «упаковки», чтобы изменить преобразование API из старой сортировки в новую, тогда только уровень упаковки будет GPL, поскольку исходное приложение не является производной работой (это было доступный до того, как вы использовали модуль GPL, и не был написан с учетом модуля GPL). Обратите внимание, что это все очень спорно, но такие вещи, как не-GPL двоичной Linux модуль ядра существует на основе этой интерпретации GPLv2
Как Нил уже сказал:. Падение под GPL не означает, что вы должны опубликовать свой код. Только когда человек, у которого есть лицензия на ваше программное обеспечение, просит об этом, вы должны предоставить ее. Случайный человек не может просто попросить код, если он / она не купил приложение. Конечно,