我一直想使代码更整洁,但我不放弃它。我的意思是...

要在XML中命名 View 的ID,我使用匈牙利表示法,如下所示:
<WHAT> <WHERE> <DESCRIPTION> <SIZE>
例如:tvExampleSectionEmptyBigtvExampleSectionEmptySmall
以前,使用Butter Knife时,我没有得到太多的编码,因为要做绑定(bind),我做了这样的事情:

@BindView (R.id.tvExampleSectionEmptyBig) TextView tvEmptyBig;
@BindView (R.id.tvExampleSectionEmptySmall) TextView tvEmptySmall;

该代码更清晰,更可重用,因为匈牙利符号用于避免在不同 Activity ,片段等中具有相同名称的id之间的冲突。实际上,它在XML中的使用并不多。

发生了什么事?

Kotlin有synthetic,它使您的工作变得更加轻松,因为通过放置 View 的ID可以直接完成绑定(bind),但是使用这么长的ID则代码非常脏……此外,我在一个 Activity 中使用的所有 View 都是有道理的名为ExampleSectionActivity,其变量名称中包含ExampleSection吗?

我想要什么?

当然,有更好的解决方案,但是最初,我的感觉是要实现一种方法,通过删除给定的String重命名变量。当我在所有ID名称中遵循约定时,以这种方式在内部进行操作:
val tvEmptyBig = tvExampleSectionEmptyBig
val tvEmptySmall = tvExampleSectionEmptySmall

但是,当然,我想以自动化方式进行。

另一方面,我已经尝试不使用id命名id并小心导入,但是就此而言,synthetic在这方面偶尔会失败,因此我必须不断进行重建。特别是当我打开另一个Android Studio实例时,通常我会经常这样做以咨询我拥有的其他项目。

任何的想法? :-)

最佳答案

我认为,简单易行的方法是:

private val myTextView: TextView
    get() = f_layoyt_text_view

这样,您不必使用荒谬的代码,至少在2018年不需要使用ButterKnife甚至更不方便的findViewById

10-07 19:24
查看更多