什么样的ID命名规范适用于Kotlin Android扩展?

14
使用Kotin android extensions,我可以避免使用findViewById,但是我不确定如何命名ID以正确使用它。
我发现有两个选项:
1. 对于ID使用简单的名称,但如果与片段一起使用,可能会在espresso中出问题
android.support.test.espresso.AmbiguousViewMatcherException:'with id:.../mainLayout'匹配层次结构中的多个视图。
这是因为我在TabLayout中有两个具有相同ID的片段:
2. 使用较长的名称以避免冲突,例如“fragment_main_layout”,但这使代码更难读取。
<LinearLayout android:id="@+id/mainLayout"
  1. 拥有者名称: "@+id/loginMainLayout""@+id/signUpMainLayout"

但是我将不得不使用变量,例如signUpMainLayout.doSomething()

注意:在这种情况下,我不喜欢使用_,因为那不是一个好的代码风格

还有其他选项吗?


我不明白为什么不使用“_”?你的参考代码风格是针对Java的,但我们的布局文件是XML。 - Trung Le
2
使用Kotlin扩展,@TrungLe可以创建具有您ID名称的扩展函数来引用视图,因此代码将充满username_textfield.text = "this text",这看起来完全不符合Java/Kotlin代码风格。 - Daniel Gomez Rico
2个回答

3
我不明白为什么你不使用“@+id/loginMainLayout”和“@+id/signUpMainLayout”,因为在Kotlin和Java中,名称通常采用“lowerCamelCase”。正如你所说,使用示例将是“signUpMainLayout.doSomething()”。
无论如何,在整个应用程序中使用唯一的ID名称是一个好习惯。这不仅仅是为了Espresso,而是主要为了知道与ID相关联的视图在哪里,当你看到ID名称时会很清楚。如果你使用这种风格,它并不难。
例如:
在“fragment_contacts”中:
<TextView id="+id/contactNameText 
android:text="John Smith" .../>

<ImageView id="+id/contactUserImage .../>

断言: 在contactUserImage中有一个Image,因为我们知道它是一个ImageView

fragment_settings中:

<TextView id="+id/settingsNotificationText 
android:text="Turn notifications on/off" .../>

<checkBox id="+id/settingsNotificationCheck .../>

1
我不喜欢这个想法的原因是使用这些变量会使代码变得非常庞大。比如,对于你的“专家”用户,可能会有一个名为activity_expert_profile的视图(对于其他用户可能有activity_normal_profile),然后用户名TextView可能被称为expertProfileUserNameTextView,正如你所看到的,变量名非常长,这就是让我感到不舒服的地方。 - Daniel Gomez Rico
这甚至还没有触及问题,因为您可能有多个屏幕与专家配置文件。因此,它很容易变成settingsExpertProfileUserNameSimpleTextView。 - Stan

2
在我的情况下,我一直在使用这个约定进行工作https://jeroenmols.com/blog/2016/03/07/resourcenaming/,但是没有使用下划线并且采用驼峰命名法。
如果你注意到在Android Studio中拖动控件到视图时,它会使用驼峰命名法对ID进行命名。
虽然变量的名称可能有点长,但你可以在变量声明中始终使用val或var。
祝好!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接