在xml id中使用点

时间:2016-11-24 11:06:39

标签: android xml android-studio kotlin

这是我的第一个问题

在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配置呢?

提前谢谢

1 个答案:

答案 0 :(得分:2)

您无法使用点,因为关注表达式R.id.main.description_container.title会尝试找到类型为main的成员Int,然后尝试查找属性description_container,但是Int没有此类财产