#android #android-recyclerview #nestedrecyclerview
Вопрос:
Я хотел бы реализовать функцию автоматического воспроизведения видеоплеера Instagram внутри своего приложения, и для этого я попробовал несколько библиотек, а также попробовал несколько способов настройки обратных вызовов для передачи обратного вызова, связанного с жизненным циклом, из фрагмента в вертикальный RecyclerView, в Вертикальный RecyclerView.
Я прошелся по следующим библиотекам:
- arthur3486/ARVI: Эта библиотека выглядит более перспективной, и она использует ExoPlayer (т. Е. медиаплеер, разработанный Google для Android) под капотом, эта библиотека обеспечивает большую настройку и предоставляет больше функций управления памятью. Он обеспечивает выпуск объектов медиаплеера, а также обеспечивает режимы автоматического воспроизведения.
- MostafaAnter/VideoPlayerInsideRecyclerView: Эта библиотека также использует ExoPlayer в качестве медиаплеера, но использует аппаратное ускорение для использования представления текстур для проектирования пользовательского интерфейса видеоплеера. Этим также управляет один разработчик, но он был недавно обновлен.
- google/ExoPlayer: Это разработанный Google медиаплеер для Android. Это библиотека ванильных медиаплееров, которую мы можем использовать напрямую, но нам необходимо реализовать все функции управления тем, когда и какие медиа-записи будут воспроизводиться приложением и как приложение будет выпускать эти медиа.
- mobileappsvn/AutoPlayVideoRecyclerView: Этот код библиотеки полностью написан на Java и был последним обновлением 2-4 года назад. Согласно их readme, эта библиотека нацелена на некоторые из этих функций. Но все же эта библиотека не предоставляет никакой информации, связанной с двумя уровнями управления видеоплеером RecyclerView. Так что нам придется попробовать и убедиться, что это должно сработать или нет.
- klinker24/Android-SimpleVideoView: Это также хорошая библиотека и обновления 2 года назад. Он полностью разработан на Java и до сих пор управляется одним разработчиком. Но опять же, нам нужно протестировать 2 уровня управления, используя также эту библиотеку. Я также нашел несколько примеров, связанных с сутью, поэтому я могу попробовать и убедиться, что он должен соответствовать нашим требованиям.
Я обнаружил, что arthur3486/ARVI кажется многообещающим, и я интегрировал его и попытался настроить все в соответствии с предоставленными рекомендациями, но это не работает и приводит к неразрешимым ошибкам.
Ответ №1:
Вот классная библиотека для обработки событий жизненного цикла в виде делегированных полей. Проявив немного воображения, вы сможете избежать всех шаблонов из моего следующего примера https://github.com/Link184/Lifecycle-Delegates
Или, благодаря компонентам google arch, мы можем сделать что-то вроде этого:
class MyAdapter(): ... {
class ViewHolder(): ..., LifecycleObserver {
init {
itemView.findViewTreeLifecycleOwner()?.lifecycle?.addObserver(this)
}
@OnLifecycleEvent(ON_PAUSE)
fun pause() { player.pause() }
@OnLifecycleEvent(ON_RESUME)
fun resume() { player.resume() }
@OnLifecycleEvent(ON_DESTROY)
fun destroy() { player.release() }
}
}
Комментарии:
1. Я сделал это, но не уверен, как и где использовать аргумент жизненного цикла в классе MyAdapter? Пожалуйста, поделитесь некоторыми подробностями, а также у меня есть вложенный Recyclerview (горизонтальный внутри вертикального), и по горизонтали будут воспроизводиться видео. Не могли бы вы, пожалуйста, дать немного больше указаний или подсказок?
2. Нам действительно не нужен аргумент жизненного цикла в конструкторе адаптера, я удалил его из примера. Вы можете получить его с помощью функции расширения
View.findViewTreeLifecycleOwner()
. Вы можете свободно использовать все вложенные представления переработчика.3. Я сделал то же самое, что и extended
LifecycleObserver
в классе ViewHolder, и создал методы сOnLifecycleEvent
аннотациями, но я не получаю обратного вызова в этих методах. Нужно ли мне делать что-то еще, кроме этого? а также не уверен, Как его использовать github.com/Link184/Lifecycle-Delegates библиотека?4. @BipinVayalu, к которому вы должны прикрепиться
LifecycleObserver
LifecycleOwner
. В моем примере мы делаем это в конструкторе держателяitemView.findViewTreeLifecycleOwner()?.lifecycle?.addObserver(this)
представления , убедитесь, что вы используете зависимости жизненного цикла, такие какAppCompatActivity
вместоActivity
иFragment
импортированные из androidx5. Да, я сделал то же самое, что и то, чем вы поделились в коде, но я использую
DaggerFragment
то, что расширено изFragment
класса, который был импортирован из androidx. Короче говоря, этоFragment
то, что удерживает RecyclerView от androidx. Так что же мне теперь здесь делать?