Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android YouTubePlayerFragment能否用于ViewPager?如果不是,还有其他选择吗?_Android_Android Youtube Api - Fatal编程技术网

Android YouTubePlayerFragment能否用于ViewPager?如果不是,还有其他选择吗?

Android YouTubePlayerFragment能否用于ViewPager?如果不是,还有其他选择吗?,android,android-youtube-api,Android,Android Youtube Api,我想要一个包含2或3个YouTube视频的小视图,嵌入到更宽的布局中(仅限平板电脑)。用户应该能够在视频之间切换(同时保持在相同的活动/屏幕上)。是否可以使用YouTubePlayerFragment执行此操作 到目前为止,似乎还没有(这里有一个答案,但由于还没有人对此发表评论,所以还不是一个明确的“否”) 单独使用YouTubePlayerFragment可以很好地工作,但我在ViewPager中偶尔会遇到各种各样的问题(其中包括:未指定的连接问题,没有发生YoutubePlayer回调;每个

我想要一个包含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+“]”;
}
}
}

我想知道的是:

  • 我是不是做错了什么导致了这些错误
  • 如果不是(即,这是YouTubePlayerFragment的缺陷或限制),是否有解决方法
  • 如果不是的话(即,我正在用这种方法进行一次无中生有的尝试),那么还有什么值得探索的替代方案呢?我正在调查的有:
    • 一些喜欢使用viewpager的人。例如,使用一个YouTubePlayerFragment实例,在切换页面时将其放入viewpager中,然后重新跟踪
    • 完全跳过ViewPager。手动实例化YouTubePlayerFragments并将其切换到FrameLayout
    • YouTube播放器API的替代品。可能是香草视频视图或ExoPlayer(尽管它只支持API>15可能是一个障碍)
  • 我有一个可行的(如果不是理想的话)解决方案。这个问题似乎是因为当ViewPager将不同的片段滑入到位时,上一个片段的流连接仍然处于打开状态

    我的解决方案是在切换ViewPager时在旧YoutubePlayer上调用
    .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?注意你使用的片段包是什么,在代码中它是一个支持片段(应用程序严重依赖于支持库)。我只是没有在