Android Kotlin ViewPager2 + Fragment 动态添加 Fragment 并使用 ExoPlayer 播放网络视频

本教程将介绍如何在 Android 应用中使用 ViewPager2 动态添加 Fragment,并在每个 Fragment 中使用 ExoPlayer 播放网络视频。

步骤:

  1. 创建 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" />
  1. 创建视频 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()
    }
}
  1. 创建 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]
    }
}
  1. 在 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录