Android YouTubePlayerFragment能否用于ViewPager?如果不是,还有其他选择吗?
我想要一个包含2或3个YouTube视频的小视图,嵌入到更宽的布局中(仅限平板电脑)。用户应该能够在视频之间切换(同时保持在相同的活动/屏幕上)。是否可以使用YouTubePlayerFragment执行此操作 到目前为止,似乎还没有(这里有一个答案,但由于还没有人对此发表评论,所以还不是一个明确的“否”) 单独使用YouTubePlayerFragment可以很好地工作,但我在ViewPager中偶尔会遇到各种各样的问题(其中包括:未指定的连接问题,没有发生YoutubePlayer回调;每个片段显示相同的缩略图;没有回调或其他反馈的空白视图) 下面是从玩具测试项目中提取的一些代码。我可能在这篇文章中引入了错误编辑,为了清楚起见,我跳过了配置更改处理等:Android YouTubePlayerFragment能否用于ViewPager?如果不是,还有其他选择吗?,android,android-youtube-api,Android,Android Youtube Api,我想要一个包含2或3个YouTube视频的小视图,嵌入到更宽的布局中(仅限平板电脑)。用户应该能够在视频之间切换(同时保持在相同的活动/屏幕上)。是否可以使用YouTubePlayerFragment执行此操作 到目前为止,似乎还没有(这里有一个答案,但由于还没有人对此发表评论,所以还不是一个明确的“否”) 单独使用YouTubePlayerFragment可以很好地工作,但我在ViewPager中偶尔会遇到各种各样的问题(其中包括:未指定的连接问题,没有发生YoutubePlayer回调;每个
public类MainActivityFragment扩展了片段{
私有静态字符串API_KEY=“something”;
公共维护活动片段(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment_main,容器,错误);
final ViewPager ViewPager=(ViewPager)rootView.findviewbyd(R.id.ViewPager);
TabLayout TabLayout=(TabLayout)rootView.findviewbyd(R.id.TabLayout);
适配器适配器=新适配器(getChildFragmentManager());
viewPager.setAdapter(适配器);
tabLayout.setupWithViewPager(viewPager);
返回rootView;
}
类适配器扩展FragmentStatePagerAdapter{
私有字符串[]getVids(){
返回新字符串[]{“orguclttdi”、“WzQ2RvSLR4o”、“dQw4w9WgXcQ”};
}
公共适配器(最终FragmentManager fm){
超级(fm);
}
@凌驾
public android.support.v4.app.Fragment getItem(最终整数位置){
YouTubePlayerSupportFragment=新的YouTubePlayerSupportFragment();
初始化(API_键,新的YouTubeplyer.OnInitializedListener(){
@凌驾
public void onInitializationSuccess(最终YouTubePlayer.Provider提供程序,
最终YouTubePlayer YouTubePlayer,
最终布尔值(b){
cueVideo(getVids()[position]);
}
返回片段;
}
@凌驾
public int getCount(){
返回getVids().length;
}
@凌驾
公共字符序列getPageTitle(最终整数位置){
返回getVids()[position]+“[”+position+“]”;
}
}
}
我想知道的是:
- 一些喜欢使用viewpager的人。例如,使用一个YouTubePlayerFragment实例,在切换页面时将其放入viewpager中,然后重新跟踪
- 完全跳过ViewPager。手动实例化YouTubePlayerFragments并将其切换到FrameLayout
- YouTube播放器API的替代品。可能是香草视频视图或ExoPlayer(尽管它只支持API>15可能是一个障碍)
.reset()
,然后在新的YoutubePlayer上再次调用.initialize()
。这需要响应TableLayout的onAbsSelected
事件,这意味着我不能使用.setupWithViewPager
(同时包含ViewPager和TableLayouts视图更改事件)。这大致就是适配器中需要的内容(initialisePlayer
和shutDownPlayer
在设置适配器、ViewPager和TableLayout的片段中响应选项卡更改而调用):
private SparseArray片段=新SparseArray(3);
私人Sparsarray玩家=新Sparsarray(3);
@凌驾
public android.support.v4.app.Fragment getItem(最终整数位置){
YouTubePlayerSupportFragment=新的YouTubePlayerSupportFragment();
碎片。放置(位置,碎片);
返回片段;
}
公共玩家(最终整数位置){
YouTubePlayerSupportFragment=fragments.get(位置);
初始化(API_键,新的YouTubeplyer.OnInitializedListener(){
@凌驾
public void onInitializationSuccess(final YouTubePlayer.Provider提供程序、final YouTubePlayer YouTubePlayer、final boolean b){
球员。推杆(位置,青年球员);
cueVideo(getVids()[position]);
}
@凌驾
public void onInitializationFailure(最终YouTuBeeplayer.Provider提供程序,最终YouTubeInitializationResult YouTubeInitializationResult){
}
});
}
公共无效关闭播放器(内部位置){
YouTubePlayer player=players.get(位置);
if(player==null){
返回;
}
player.release();
}
这种方法的缺点:
- 需要存储对YouTubePlayers支持片段和YouTubePlayers的引用
- 选项卡在每个开关上重新初始化
如果有更好的解决方案出现,我愿意接受。试试YoutubePlayerSupportFragment?注意你使用的片段包是什么,在代码中它是一个支持片段(应用程序严重依赖于支持库)。我只是没有在