我刚刚将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"?
只需使用transaction.replace。忽略该错误,它将起作用。Google尚未重构youtube api库androidx。
小智 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)
测试...它的工作。
代替 .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。
| 归档时间: |
|
| 查看次数: |
2349 次 |
| 最近记录: |