android – ListView项目中的YouTubePlayerSupportFragment为null

我正在尝试在ListView项目中使用YouTubePlayerSupportFragment. ListView位于Activity中的Fragment中.由于存在嵌套片段,我使用getChildFragmentManager()方法尝试从XML布局中查找片段.这是代码.

Java

convertView = inflater.inflate(R.layout.youtube_post_layout,null);
YouTubePlayerSupportFragment youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_video);
if (youTubePlayerFragment == null) {
    Log.i("YouTube","player is null");
} else {
    Log.i("YouTube",youTubePlayerFragment.toString());
}

XML

ottom_layout" />

问题是,当我尝试通过执行findFragmentById()从XML获取它来创建片段时,它返回null,这就是发布到堆栈跟踪的内容.

我正在尝试关注YouTube API示例并对嵌套片段进行更改,但我无法找出导致问题的原因.

最佳答案
你采取的整个方法都存在问题.

首先,直接从XML中扩展子片段是not supported.在嵌套片段时,必须使用父片段中的getChildFragmentManager以语音方式添加它们.

其次,即使它起作用(并且在某些情况下可能),你已经夸大了视图但没有将它添加到实际片段的布局中.这就是膨胀方法中的second and third parameters所在. FragmentManager将在其当前布局中查找片段,或在backstack中查找事件,但无法找到以随机XML膨胀的片段,并且永远不会使用.

最后,也是最重要的一点,你永远不应该在ListView中添加片段作为项目.片段期望生命周期与它们所处的活动相关联,而ListView或任何一般的AdapterView将根据需要创建,销毁和回收其子级.

可能的解决方案:

>您的列表中需要多少个视频?如果它们不多,ScrollView LinearLayout实际上可能是最简单的解决方案.
>如果你真的需要查看回收,也许你可以在每一行都没有实时视频吗?考虑在您的行中使用YouTubeThumbnailView,然后将用户重定向到另一个活动/在位于布局列表外部的单个YoutubeFragment中加载视频.
>如果您肯定希望直接在列表中的每一行播放视频,则需要在行布局上使用YoutubePlayerView而不是片段.在这种情况下,请仔细阅读文档,因为您需要自己处理视频初始化和查看回收.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...