要在ViewPage2中动态添加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()
    }
}

这样就可以在ViewPage2中动态添加Fragment,并在Fragment中使用ExoPlayer播放网络视频了。

Android kotlin ViewPage2+Framgnet 动态添加Fragment并在fragment中使用ExoPlayer播放网络视频

原文地址: https://www.cveoy.top/t/topic/jf5C 著作权归作者所有。请勿转载和采集!

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