Kotlin 在片段中找不到按钮 ID,为啥?

Posted

技术标签:

【中文标题】Kotlin 在片段中找不到按钮 ID,为啥?【英文标题】:Kotlin can't find button Id in fragment, why?Kotlin 在片段中找不到按钮 ID,为什么? 【发布时间】:2020-11-27 11:52:33 【问题描述】:

我有一个问题,因为我的 Fragment 类无法在 Fragment 中找到我的 Button 的 Id。我给 Ciew 充气,但这仍然不起作用,我想在 Btn ClickListener 上进行设置,但我不能。我该如何解决?

我的 Fragment 的 Kotlin 代码:

class FragmentMain : Fragment() 

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? 
    return inflater.inflate(R.layout.fragment_main, container, false)



override fun onStart() 
    super.onStart()

    play.setOnClickListener  <--- here is error, cause kotlin don't know this button??
        Toast.makeText(context, "test", Toast.LENGTH_SHORT).show()
    

和 XML

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:layout_centerInParent="true"
tools:context=".FragmentMain">
<LinearLayout
    android:id="@+id/container_frag"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:layout_marginLeft="50dp"
    android:layout_marginRight="50dp"

    >
    <Button
        android:id="@+id/play"
        android:layout_
        android:layout_
        android:text="Play" />

    <Button
        android:id="@+id/about"
        android:layout_
        android:layout_
        android:text="About" />
</LinearLayout>

【问题讨论】:

【参考方案1】:

您必须首先获得对该按钮的引用,因此您必须执行以下操作

val button = findViewById<Button>(R.id.play)
button.setOnClickListener  _ ->
   //do what you want after click inside here

【讨论】:

但是在返回 View 之前我必须这样做吗?在 onCreateView 上 确切地说,您可以按照@georkost 在onViewCreated 中所说的操作,也可以在 onCreateView 中完成。完全删除onStart 方法。更多信息请参见***.com/a/38718205/1133011【参考方案2】:

正如@georkost 所说,在 onViewCreated 中声明您的按钮引用,但从您的视图中调用 findViewById 方法:

val button = view.findViewById<Button>(R.id.play)

【讨论】:

以上是关于Kotlin 在片段中找不到按钮 ID,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 xml 定义的活动中找不到 onClick 方法

在 kotlin 中找不到我的 GitLab CI 测试

Flutter:kotlin在java安装中找不到需要的jdk工具

那我用SQL创建表之后,为啥在所创建的数据库中找不到呢?

Kotlin 在 Java 安装中找不到所需的 JDK 工具

在构建版本中找不到数据类 Kotlin 的序列化程序