2017-04-26 77 views
5

使用Kotin android extensions我可以避免使用findViewById,但 我不知道如何命名ID来使用它的属性。什么样的ID名称约定是好的Kotlin android扩展

我发现了两个选项:

  1. 使用IDS 简单的名称,但然后我可以在咖啡遇到麻烦,如果我与片段使用它:

android.support .test.espresso.AmbiguousViewMatcherException:'与id:.../mainLayout'匹配层次结构中的多个视图。

这是因为我有相同ID的TabLayout内两个片段:

<LinearLayout android:id="@+id/mainLayout" 
  • 名称与所有者:"@+id/loginMainLayout""@+id/signUpMainLayout"
  • 但那么我将不得不使用像signUpMainLayout.doSomething()这样的变量。

    注意:我不喜欢在这种情况下使用_,因为这不是一个好的code style

    还有什么其他的选择?

    +0

    我没有看到不使用'_'的原因?你的ref代码样式是为java编写的,但我们的布局文件是xml –

    +1

    @TrungLe带有kotlin扩展名,它们用你的id的名称创建扩展函数来引用视图,所以代码将充满'username_textfield.text =“这个文本“'看起来完全没有java/kotlin代码样式。 – Caipivara

    回答

    2

    我不明白为什么不使用"@+id/loginMainLayout""@+id/signUpMainLayout"当名称在lowerCamelCase这是在kotlin和java中很常见。正如你所说的,用例将是signUpMainLayout.doSomething()

    无论如何这是一个很好的做法,在整个应用程序中使用id的唯一名称。这不是因为Espresso的缘故,而是主要是在看到ID的名称时知道与ID相关的视图。如果你使用这种风格并不难。 例子:

    fragment_contacts

    <TextView id="+id/contactNameText 
    android:text="John Smith" .../> 
    
    <ImageView id="+id/contactUserImage .../> 
    

    断言:存在contactUserImageImage,因为知道这是一个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',你可以看到变量名是ultra BIG,这正是让我感觉不好的原因。 – Caipivara

    2
    在我的情况

    ,我一直在用这个约定https://jeroenmols.com/blog/2016/03/07/resourcenaming/, 工作,但没有下划线和骆驼案件约定。

    如果你注意到当你将一个控件拖到一个视图中,在android studio中,它使用camel case约定来命名该id。

    虽然变量的名称可能有点大,但您始终可以在变量的声明中使用val或var。

    关于