这个cast永远不会成功。Androidx

3

我正在使用AndroidX Fragment,但总是得到YouTubeFragment的null引用,这是因为不同的转换方式导致的。图像

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片段类型。感谢您的帮助。

是的,我知道,我只是想要一个解决那个问题的方案。 - Hussnain Haidar
检查你的gradle.properties文件中是否存在android.enableJetifier=true。https://developer.android.com/studio/command-line/jetifier - ecle
https://dev59.com/ZFQK5IYBdhLWcg3wDLkw - ecle
谢谢,我明天会查看它并告诉你。祝你有愉快的一天。 - Hussnain Haidar
import android.app.Fragment; 这是有问题的,因为这是系统 Fragment 而不是支持/AndroidX Fragment。 - EpicPandaForce
显示剩余6条评论
1个回答

3
因为你的childFragmentManager来自AndroidX包,所以findFragmentById的返回类型是androidx.FragmentYouTubePlayerSupportFragmentandroid.support.v4.app.Fragment,因此在编译时,它们是两种无法相互转换的不同类型。问题在于Youtube SDK未使用androidx。你可以通过启用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")

我在gradle.properties中设置了android.enableJetifier,但它仍然对我无效。 - KalBaratheon
同样的问题,我的gradle.properties也是这样,但对我仍然不起作用。 - exequielc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接