ビューが表示されているかどうかを確認するコードがあります
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"
/>