Youtube播放器支持片段不再适用于Android studio 3.2(androidx)

Nic*_*aro 13 youtube androidx

我刚刚将Android Studio更新到版本3.2并按照说明使用androidx.

我一直在Fragment活动中使用Youtube片段,一切都运行得很好但是,在更新之后,这3条简单的行现在给我错误"无法解析方法'添加(...)'":

YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();
Run Code Online (Sandbox Code Playgroud)

...当我尝试使用"替换"而不是"添加"时,它说:"错误的第二个参数类型.发现:'com.google.android.youtube.player.YouTubePlayerSupportFragment',必需:'androidx.fragment.app .分段'"

...这让我觉得问题与新的AndroidX功能有关.

问题是add方法需要第二个类型的参数:

androidx.fragment.app.Fragment
Run Code Online (Sandbox Code Playgroud)

...但是YouTubePlayerSupportFragment会返回:

android.support.v4.app.Fragment
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?有没有办法将"android.support.v4.app.Fragment"强制转换为"androidx.fragment.app.Fragment"?

Bek*_*Bek 7

只需使用transaction.replace。忽略该错误,它将起作用。Google尚未重构youtube api库androidx。

  • 官方的“ youtube api”有问题。您可以使用自定义的youtube https://github.com/PierfrancescoSoffritti/android-youtube-player (2认同)
  • 当应用程序未自行编译时如何忽略错误。 (2认同)

小智 7

只需将原始 java 文件 ( com.google.android.youtube.player.YouTubePlayerFragment)复制到您的项目到相同的包但不同的类名等com.google.android.youtube.player.YouTubePlayerFragmentX,并将扩展类从 更新android.app.Fragment到androidx.fragment.app.Fragment。

实现是一样的:

YouTubePlayerFragmentX youTubePlayerFragment = YouTubePlayerFragmentX.newInstance();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();
Run Code Online (Sandbox Code Playgroud)

测试...它的工作。

  • 它充满了错误,需要访问非公开的类 (2认同)

小智 6

我已经按照@Hosszful 的回答修复了它,我只使用这个文件就很容易了,https: //gist.github.com/medyo/f226b967213c3b8ec6f6bebb5338a492


Att*_*lah 6

代替 .add

transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();
Run Code Online (Sandbox Code Playgroud)

有了这个 .replace

transaction.replace(R.id.youtube_fragment, youTubePlayerFragment).commit();
Run Code Online (Sandbox Code Playgroud)

并将此类复制到您的项目文件夹中(可能需要创建以下文件夹)

java -> com -> google -> android -> youtube -> 播放器 ->(此处的名称)YouTubePlayerSupportFragmentX.java

在此处输入图片说明

然后在代码中替换

YouTubePlayerSupportFragment 到 YouTubePlayerSupportFragmentX。