Android Kotlin ViewPager2 + Fragment 动态添加 Fragment 并使用 ExoPlayer 播放网络视频
Android Kotlin ViewPager2 + Fragment 动态添加 Fragment 并使用 ExoPlayer 播放网络视频
本教程将介绍如何在 Android 应用中使用 ViewPager2 动态添加 Fragment,并在每个 Fragment 中使用 ExoPlayer 播放网络视频。
步骤:
- 创建 ViewPager2 布局:用于显示 Fragment,并在布局文件中添加 ViewPager2 和 TabLayout(可选)。
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
- 创建视频 Fragment:用于播放视频。在 Fragment 中添加 ExoPlayerView 用于展示视频。
class VideoFragment : Fragment() {
private lateinit var playerView: PlayerView
private lateinit var player: SimpleExoPlayer
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_video, container, false)
playerView = view.findViewById(R.id.playerView)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
player = SimpleExoPlayer.Builder(requireContext()).build()
playerView.player = player
val mediaItem = MediaItem.fromUri('http://example.com/video.mp4')
player.setMediaItem(mediaItem)
player.prepare()
player.play()
}
override fun onDestroyView() {
super.onDestroyView()
player.release()
}
}
- 创建 FragmentPagerAdapter:用于管理 Fragment。
class PagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) : FragmentStateAdapter(fragmentManager, lifecycle) {
private val fragments = mutableListOf<Fragment>()
fun addFragment(fragment: Fragment) {
fragments.add(fragment)
}
override fun getItemCount(): Int {
return fragments.size
}
override fun createFragment(position: Int): Fragment {
return fragments[position]
}
}
- 在 Activity 中初始化 ViewPager2 和 TabLayout 并设置 PagerAdapter:
class MainActivity : AppCompatActivity() {
private lateinit var viewPager: ViewPager2
private lateinit var tabLayout: TabLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewPager = findViewById(R.id.viewPager)
tabLayout = findViewById(R.id.tabLayout)
val adapter = PagerAdapter(supportFragmentManager, lifecycle)
adapter.addFragment(VideoFragment())
viewPager.adapter = adapter
TabLayoutMediator(tabLayout, viewPager) { tab, position ->
// 设置 Tab 标题
tab.text = "Tab $position"
}.attach()
}
}
通过以上步骤,您就可以在 ViewPager2 中动态添加 Fragment,并在每个 Fragment 中使用 ExoPlayer 播放网络视频了。
注意事项:
- 确保在您的项目中添加了 ExoPlayer 库。
- 将
'http://example.com/video.mp4'替换为您的实际视频 URL。 - 您还可以根据需要调整 Fragment 的布局和功能。
- 在 Fragment 的
onDestroyView()方法中释放 ExoPlayer,避免内存泄漏。 - 可以通过
TabLayoutMediator来关联 TabLayout 和 ViewPager2,实现 Tab 栏的自动切换。 - 可以根据实际需求扩展
PagerAdapter来实现更多的功能,例如动态加载 Fragment、根据网络状态调整视频播放等。
希望本教程能帮助您在 Android 应用中轻松实现 ViewPager2 + Fragment + ExoPlayer 的组合应用,并实现网络视频的播放功能。
原文地址: https://www.cveoy.top/t/topic/dasT 著作权归作者所有。请勿转载和采集!