gpt4 book ai didi

android - ListView 项目中的 YouTubePlayerSupportFragment 为空

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:47:41 26 4
gpt4 key购买 nike

我正在尝试在 ListView 项中使用 YouTubePlayerSupportFragmentListView 位于 Activity 中的 Fragment 内。由于存在嵌套 fragment ,我使用 getChildFragmentManager() 方法尝试从 XML 布局中查找 fragment 。这是代码。

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<include layout="@layout/post_base_layout" />

<fragment
android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
android:id="@+id/youtube_video"
android:layout_width="match_parent"
android:layout_height="240dp"
android:layout_marginLeft="62dp"
android:layout_marginRight="32dp"
android:background="@color/light_grey"
android:cropToPadding="true"
android:padding="1dp"
android:scaleType="centerCrop" />

<include layout="@layout/post_bottom_layout" />

</LinearLayout>

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

我正在尝试遵循 YouTube API 示例并对嵌套 fragment 进行所需的更改,但我无法找出导致问题的原因。

最佳答案

您采用的整个方法存在问题。

首先,直接从 XML 扩展子 fragment 是 not supported .嵌套 fragment 时,您必须在父 fragment 中使用 getChildFragmentManager 动态添加它们。

其次,即使它起作用了(在某些情况下可能起作用),您已经膨胀了 View 但没有将它添加到实际 fragment 的布局中。这就是second and third parametersinflate 方法中有。 FragmentManager 将在其当前布局中查找 fragment ,或在后台堆栈中查找事件,但找不到在随机 XML 中膨胀且从未使用过的 fragment 。

最后,也是最重要的一点,您永远不应将 fragment 作为项目添加到 ListView 中。 Fragments 期望有一个与它们所在的 Activity 相关联的生命周期,而 ListView 或一般的任何 AdapterView 将根据需要创建、销毁和回收其子项。

可能的解决方案:

  • 您的列表中需要多少个视频?如果它们不多,ScrollView+LinearLayout 实际上可能是最简单的解决方案。

  • 如果你真的需要 View 回收,也许你可以不用每一行的实时视频?考虑使用 YouTubeThumbnailView在您的行中,然后将您的用户重定向到另一个 Activity/在布局列表之外的单个 YoutubeFragment 中加载视频。

  • 如果您确实希望视频直接在列表中的每一行播放,您需要使用 YoutubePlayerView而不是行布局上的 fragment 。在这种情况下,请仔细阅读文档,因为您需要自己处理视频初始化和 View 回收。

关于android - ListView 项目中的 YouTubePlayerSupportFragment 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15802626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com