这种转换永远不可能成功。安卓x

时间:2019-02-10 12:48:19

标签: android android-fragments kotlin androidx

我使用的是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片段类型。帮助总是值得赞赏的。

1 个答案:

答案 0 :(得分:2)

这是因为您的childFragmentManager来自AndroidX包,因此findFragmentById的返回类型为androidx.FragmentYouTubePlayerSupportFragmentandroid.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")