Android kotlin ViewPage2+Framgnet 动态添加Fragment并在fragment中使用ExoPlayer播放网络视频
要在ViewPage2中动态添加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()
}
}
这样就可以在ViewPage2中动态添加Fragment,并在Fragment中使用ExoPlayer播放网络视频了。
原文地址: https://www.cveoy.top/t/topic/jf5C 著作权归作者所有。请勿转载和采集!