【问题标题】:Type mismatch: inferred type is Fragment but YouTubePlayerSupportFragment was expected类型不匹配:推断类型为 Fragment 但应为 YouTubePlayerSupportFragment
【发布时间】:2019-06-16 09:14:57
【问题描述】:

自从我升级了我的 Android Studio 后,我不断收到这个错误。 这是我的activity_main.xml(相关部分)

<fragment
            android:id="@+id/youtube_player_fragment"
            android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

这是我的 MainActivity.kt

lass MainActivity : AppCompatActivity()
{
    lateinit var youTubePlayerSupportFragment: YouTubePlayerSupportFragment
    lateinit var youTubePlayer: YouTubePlayer


    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initializeYoutubePlayer()
    }


    private fun initializeYoutubePlayer()
    {
        youTubePlayerSupportFragment = supportFragmentManager.findFragmentById(R.id.youtube_player_fragment) //<-- I get ERROR in this line

    }
}

【问题讨论】:

  • 投到YouTubePlayerSupportFragmentfindFragmentById 的返回类型为 Fragment

标签: android kotlin youtube-api


【解决方案1】:

您可以在设置youTubePlayerSupportFragment 时使用转换运算符as。默认findFragmentById返回Fragment类型的对象:

...
private fun initializeYoutubePlayer() {
    youTubePlayerSupportFragment = supportFragmentManager.findFragmentById(R.id.youtube_player_fragment) as YouTubePlayerSupportFragment
}
...

更简单的选择是直接通过其 ID 使用您的 Fragment,因为它已经在 xml 文件中定义:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    //your Fragment is bound at this point
    assert youtube_player_fragment != null
}

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 2020-04-24
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2021-11-18
    相关资源
    最近更新 更多