我有一段代码检查视图是否可见
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)
视图是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 的不同视图。
form_component_main
<FrameLayout
android:id="@+id/overflow_panel"
android:layout_width="250dp"
android:layout_height="wrap_content"
/>