2016-11-24 4 views
0

это мой первый вопросИспользование точек в XML идентификаторами

В Java я никогда не имел эту проблему раньше.

я провел два дня, потому что у меня была проблема только на расчетном режиме на Android студии Раздувание 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.TypeCastException: нуль не может быть приведен к ненулевым типа android.widget.TextView в ... $ mLabel $ 2 .invoke (CustomView.kt: 22))

Обычно я использую <layout>[.<where_container>].<name> шаблон назвать идентификаторы и строки на XMLs (например: android:id="@+id/main.description_container.title")
Это автоматически переводится в R.id.main_description_container_title (уведомление точка становится подчеркиванием) в коде

Проблема была решена, когда я заменяю эти точки символами подчеркивания вручную в XML

Я искал условные обозначения, объясняющие, почему точки не должны использоваться в идентификаторах или именах строк, но безуспешно. Я хочу знать, какова реальная проблема с этим соглашением о названии. Этого действительно следует избегать?

Должен ли я просто отказаться от идеи и просто подчеркнуть пользователя? Глядя на это проблема только на котлине, может быть, какая-то конфигурация градиента?

Спасибо заранее

+0

Я нашел этот ответ, указывающий на более значительную проблему: https://stackoverflow.com/questions/24140877/do-string-resource-xml-files-allow-invalid-java-variables-as-name-attributes – crgarridos

ответ

1

Вы не можете использовать точки, потому что следующее выражение R.id.main.description_container.title попытается найти элемент main который имеет тип Int, а затем попытаться найти свойство description_container, но Int не имеет такое свойство

+0

Ok , но когда вы запускаете приложение, оно работает идеально. Это проблема только в режиме предварительного просмотра Android Studio + kotlin. С Java Это тоже работает – crgarridos

+0

@cgarrido Я думаю, это плохая идея использовать точки, но вы можете открыть отчет об ошибке (во всяком случае, Kotlin официально не поддерживается) –

Смежные вопросы