Как опубликовать видео / мультимедиа на предыдущей странице при смене страницы с помощью PagerAdapter и ScalableVideoView (например, VideoView) - PullRequest
0 голосов
/ 31 августа 2018

Это мой код в PagerAdapter (код котлина)

class SwipeAdapter : PagerAdapter {
    var videoResources :ArrayList<Int>
    lateinit var videoBackground : ScalableVideoView
    private var ctx: Context

    constructor(ctx: Context, videoResources: ArrayList<Int>) : super(){
        this.videoResources = videoResources
        this.ctx = ctx
    }
    override fun isViewFromObject(view: View?, `object`: Any?): Boolean {
        return (view == `object` as FrameLayout)
    }

    override fun getCount(): Int {
        return videoResources.count()
    }

    override fun instantiateItem(container: ViewGroup?, position: Int):View{
        val layoutInflater = ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        val rootView =  layoutInflater.inflate(R.layout.view_breath_fragment_slide,container,false)
        this.videoBackground = rootView.findViewById(R.id.videoBackground)


    .....


            try {
                videoBackground.setRawData(videoResources.get(position))
                videoBackground.setVolume(0f, 0f)
                videoBackground.isLooping = true
                videoBackground.prepare { videoBackground.start()}
            } catch (ioe: IOException) {
                //ignore
            }
            videoBackground.visibility = View.VISIBLE
....
        container?.addView(rootView)
        return rootView
    }

    override fun destroyItem(container: ViewGroup?, position: Int, `object`: Any?) {
        container?.removeView(`object` as FrameLayout)
    }

}

И это ошибка, которую я получил из-за того, что видео / мультимедиа продолжают воспроизводиться, пока я переключаю на другие приложения или просто захожу Home

A / OpenGLRenderer: Утечка двух объектов GPU! A / libc: фатальный сигнал 6 (SIGABRT), код -6 в тиде 19002 (RenderThread)


Я пытаюсь выпустить видео / медиа, как:

 if(videoBackground!=null)
       videoBackground.release()

или Я пытался уничтожить пункт:

 override fun instantiateItem(container: ViewGroup?, position: Int):View{
    val layoutInflater = ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    val rootView =  layoutInflater.inflate(R.layout.view_breath_fragment_slide,container,false)
    rootView.findViewById(R.id.videoBackground).release()

но это не помогает, потому что он не обращается к объекту предыдущей страницы

другая неудачная попытка, но в основном такая же для MainActivity: (java)

viewPager.getAdapter().videoBackground.release()

еще много неудачных попыток, но я думаю, что этого уже достаточно, чтобы показать, что я иду по тому же кругу

...