代码之家  ›  专栏  ›  技术社区  ›  Hussnain Haidar

这个演员永远不会成功。安卓立德

  •  0
  • Hussnain Haidar  · 技术社区  · 6 年前

    image

    import androidx.fragment.app.Fragment
    
    val youtubeFragment = 
    childFragmentManager.findFragmentById(R.id.playbackYoutubeFragment) as 
    com.google.android.youtube.player.YouTubePlayerFragment
    

    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 回复  |  直到 6 年前
        1
  •  2
  •   ॐ Rakesh Kumar    5 年前

    因为你 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
    

    这将通过将第三方库中的所有支持类迁移到 ,因此您的强制转换将在运行时成功。但是,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")