Android kotlin ViewPage2动态添加Fragment 在fragment中使用ExoPlayer
要在Fragment中使用ExoPlayer,首先需要在项目中添加ExoPlayer的依赖项。在项目的build.gradle文件中添加以下代码:
implementation 'com.google.android.exoplayer:exoplayer-core:2.14.1'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.14.1'
接下来,你可以创建一个继承自Fragment的自定义Fragment类,并在其onCreateView方法中初始化ExoPlayer,并在onDestroyView方法中释放ExoPlayer。
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.google.android.exoplayer2.DefaultLoadControl
import com.google.android.exoplayer2.ExoPlayerFactory
import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.source.MediaSource
import com.google.android.exoplayer2.source.ProgressiveMediaSource
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
import com.google.android.exoplayer2.ui.PlayerView
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory
import com.google.android.exoplayer2.util.Util
class YourFragment : Fragment() {
private lateinit var player: SimpleExoPlayer
private lateinit var playerView: PlayerView
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val rootView = inflater.inflate(R.layout.your_fragment_layout, container, false)
playerView = rootView.findViewById(R.id.player_view)
return rootView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val userAgent = Util.getUserAgent(requireContext(), "YourApplicationName")
val dataSourceFactory = DefaultDataSourceFactory(requireContext(), userAgent)
val mediaSource: MediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(/* your media uri */)
player = ExoPlayerFactory.newSimpleInstance(requireContext(), DefaultTrackSelector(), DefaultLoadControl())
player.prepare(mediaSource)
playerView.player = player
player.playWhenReady = true
}
override fun onDestroyView() {
super.onDestroyView()
player.release()
}
}
在你的ViewPager2适配器中,你可以通过动态添加Fragment来使用这个自定义Fragment类。
class YourPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragmentManager, lifecycle) {
override fun getItemCount(): Int {
return /* number of fragments in your ViewPager2 */
}
override fun createFragment(position: Int): Fragment {
return YourFragment()
}
}
然后,你可以将这个PagerAdapter设置给你的ViewPager2:
val viewPager2: ViewPager2 = findViewById(R.id.view_pager2)
val adapter = YourPagerAdapter(supportFragmentManager, lifecycle)
viewPager2.adapter = adapter
这样,你就可以动态地在ViewPager2中添加使用ExoPlayer的Fragment了。
原文地址: https://www.cveoy.top/t/topic/jf5u 著作权归作者所有。请勿转载和采集!