это мой первый вопрос
На Java у меня никогда не было этой проблемы раньше.
Я провел два дня, потому что у меня была проблема только в режиме разработки на студии Android, раздувающей CustomView с kotlin . У меня был 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 не может быть применено к ненулевому типу android.widget.TextView at … $ mLabel $ 2.invoke (CustomView.kt: 22))
Обычно я использую шаблон <layout>[.<where_container>].<name>
для ввода идентификаторов и строк в XMls (например: android:id="@+id/main.description_container.title"
)
Это автоматически преобразуется в R.id.main_description_container_title
(точки уведомления становятся R.id.main_description_container_title
подчеркивания) в коде
Проблема была решена, когда я заменяю эти точки символами подчеркивания вручную в XML
Я искал условные обозначения имен, объясняющие, почему точки не должны использоваться в идентификаторах или именах строк, но безуспешно. Я хочу знать, какова реальная проблема с этим соглашением о названии. Этого действительно следует избегать?
Должен ли я просто отказаться от идеи и просто подчеркнуть пользователя? Глядя на это проблема только на котлине, может быть, какая-то конфигурация градиента?
заранее спасибо
Вы не можете использовать точки, потому что в следующем выражении R.id.main.description_container.title
попытается найти элемент-член, который имеет тип Int
а затем попробуйте найти свойство description_container
, но Int
не имеет такого свойства