我一直想使代码更整洁,但我不放弃它。我的意思是...
要在XML中命名 View 的ID,我使用匈牙利表示法,如下所示:<WHAT> <WHERE> <DESCRIPTION> <SIZE>
例如:tvExampleSectionEmptyBig
,tvExampleSectionEmptySmall
以前,使用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
。