我使用的是androidx片段,但总是获得对youTubeFragment的空引用,这是因为转换类型不同。image
import androidx.fragment.app.Fragment
val youtubeFragment =
childFragmentManager.findFragmentById(R.id.playbackYoutubeFragment) as
com.google.android.youtube.player.YouTubePlayerFragment
youtube片段导入为:
import android.app.Fragment;
我的布局:
<fragment
android:id="@+id/playbackYoutubeFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.google.android.youtube.player.
YouTubePlayerFragment"
app:layout_constraintTop_toTopOf="parent"/>
是否有解决该问题的解决方案?或者我必须更改片段类型。实际上,我不想更改我的androidx片段类型。帮助总是值得赞赏的。
答案 0 :(得分:2)
这是因为您的childFragmentManager
来自AndroidX
包,因此findFragmentById
的返回类型为androidx.Fragment
。
YouTubePlayerSupportFragment
是android.support.v4.app.Fragment
,因此在编译时,它们是cannot be cast to each other
的两个独立类型。
问题是Youtube SDK
未使用androidx
。您可以通过enabling jetifier
来解决此问题,并将以下代码添加到gradle.properties
中:
android.enableJetifier=true
这将通过将第三方库中的所有支持类迁移到androidx
来解决此问题,因此您的转换将在运行时成功。但是,Android Studio警告仍然存在-您可以取消警告:
// CAST_NEVER_SUCCEEDS can be ignored - happens because Youtube SDK's fragment is not
// androidx.Fragment, but Jetifier will take care of that and cast will succeed
@Suppress("CAST_NEVER_SUCCEEDS")