gpt4 book ai didi

android - Kotlinx 从错误的布局中注入(inject) View

转载 作者:行者123 更新时间:2023-11-29 01:18:22 26 4
gpt4 key购买 nike

我有一段代码检查 View 是否可见

import kotlinx.android.synthetic.main.activity_layout.*

val isOverflowPanelShown: Boolean
get() = overflow_panel.visibility != View.GONE

前面的代码抛出异常

java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to android.widget.ScrollView
at com.company.app.Activity.isOverflowPanelShown(Activity.kt:362)

View 是 ScrollView 类的实例,但是 kotlin 认为它是一个 FrameLayout。在抛出错误的同一位置调用 findViewById() 它会正确返回 ScrollView。我发现在应用程序的不同布局中有一个 FrameLayout 在相同的 id 下

我正在按照布局充气

activity_layout

<ScrollView
android:id="@+id/overflow_panel"
android:layout_width="300dp"
android:layout_height="wrap_content"
/>

在我在完全不同的地方使用的另一个布局中,有一个具有相同 ID 的不同 View 。

form_component_main

<FrameLayout
android:id="@+id/overflow_panel"
android:layout_width="250dp"
android:layout_height="wrap_content"
/>

最佳答案

为什么不给他们不同的 ID?

overflow_panel_scroll
overflow_panel_frame

或者更能描述他们实际所做的事情。

更新:在这被否决后,有更多的解释。 ID 应该是唯一的。

Android 文档说,如果 ID 不是唯一的,可能会发生冲突:ID 不必在整个树中是唯一的,但它在您正在搜索的树的部分内应该是唯一的(这可能通常是整棵树,因此最好尽可能完全唯一。(来自 http://developer.android.com/guide/topics/ui/declaring-layout.html )

Kotlin 合成器由 IntelliJ 插件生成。如果 ID 不是唯一的,插件目前似乎无法将 ID 正确匹配到正确的 View 。它可能需要唯一的 ID。

关于android - Kotlinx 从错误的布局中注入(inject) View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38338943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com