【问题标题】:This cast can never be succeed. Androidx这个演员永远不会成功。安卓x
【发布时间】:2019-07-04 02:53:33
【问题描述】:

我正在使用 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 片段类型。我们总是感谢您的帮助。

【问题讨论】:

  • 编译器告诉您findFragmentById 返回的对象不是YouTubePlayerFragment 或任何可以转换为该类型的对象,因此将其转换为没有意义。投射不会神奇地将一种类型的对象转换为完全不同类型的对象...
  • 是的,我知道我只是想要解决这个问题。
  • 检查android.enableJetifier = true是否存在于您的gradle.properties developer.android.com/studio/command-line/jetifier
  • 谢谢大佬,我明天去看看。并让你知道。祝您有愉快的一天。

标签: android android-fragments kotlin androidx


【解决方案1】:

因为你的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")

【讨论】:

  • 我的 gradle.properties 中有 android.enableJetifier,但它仍然对我不起作用
  • 这里也一样,我的 gradle.properties 但它仍然对我不起作用
猜你喜欢
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
相关资源
最近更新 更多