这是我的第一个问题
在Java中我以前从未遇到过这个问题。
我花了两天时间,因为我在Android工作室上用 kotlin 夸大了一个CustomView时出现了仅在设计模式上的问题。膨胀后我有一个findByView = null。运行应用程序,一切都是正确的
View.inflate(context, R.layout.widget_navigation_section_button, this)
mLabel = findViewById(R.id.navigation_section_title)
mLabel.setText("something")
抛出一个NPE (对于kotlin中的真实:kotlin.TypeCastException:null无法转换为非null类型android.widget.TextView at ... $ mLabel $ 2.invoke(CustomView.kt:22) )
通常情况下,我使用<layout>[.<where_container>].<name>
模式在XMls上命名id和字符串(例如:android:id="@+id/main.description_container.title"
)
这在代码
R.id.main_description_container_title
(注意点变为下划线)中自动翻译
当我在XML
中手动用下划线替换这些点时,问题就解决了我正在寻找名称约定,解释为什么不应该在ID或字符串命名中使用点,但没有成功。我想知道这个名称约定的真正问题是什么。这应该是真的避免吗?
我应该放弃这个想法,只是用户下划线?看看它只是关于kotlin的一个问题,也许是一些gradle配置呢?
提前谢谢
答案 0 :(得分:2)
您无法使用点,因为关注表达式R.id.main.description_container.title
会尝试找到类型为main
的成员Int
,然后尝试查找属性description_container
,但是Int
没有此类财产