【发布时间】:2018-11-12 14:24:42
【问题描述】:
我曾经为 Android 视图提供简单的 id,但最近因为这个问题我完全停止了。
假设我有 2 个布局,一个名为 first_layout.xml,第二个名为 second_layout.xml。在每个布局中,都有一个 ID 为 username_input 的视图。这个 id 用于不同的活动类来访问目标视图,无论是ButterKnife 绑定,Kotlin Android Extensions,甚至是findViewById。
现在,无论出于何种原因,我只需要在一个布局中重命名 id。因此我做Refactor -> Rename。发生什么了? Android Studio 只是简单地替换了整个项目中的 id username_input,弄乱了其他具有相同 id 的布局。大多数人不会为项目中的每个视图都使用唯一的 id,因为它不是强制性的,但我这样做是因为我做了很多重构,而且很多时候我因为这个非项目中的上下文替换。
在这种情况下我有哪些选择?有没有办法让 Android Studio 在这种情况下进行上下文替换,或者我应该继续在我的项目中制作唯一的 id?
【问题讨论】:
-
不使用重构并进行简单的复制替换?鉴于大多数布局文件只在一个 Java 文件中直接使用,它几乎没有更多的努力。
-
@GabeSechan 1-2 个文件没有变化。例如,当在 xml 文件中包含通用布局时,它甚至可能涉及 10-15 个文件,并且手动更改所有这些? =/ Kotlin Android Extension在java类中也使用view的id作为引用名,如果代码中有很多对目标view执行的操作,可能会出现很多情况。
-
@xiniaz 然后你需要改进你的实现——如果你在十几个文件中引用布局的子字段,那么你应该将它转换为具有抽象接口的片段或复合视图所有这一切都是为了你。我会说,如果你在超过 1 中引用它,你应该这样做。
-
我建议将问题的名称更改为“在一个地方更改 id 在 android xml 文件中的其他地方更改 id” - 我很确定很多人会遇到这个问题。请在下面查看我的解决方法答案。
-
当您将一个布局复制到另一个布局并尝试重构新文件中的 id 时也会发生这种情况......它也倾向于重构源文件中的 id......
标签: android android-studio view refactoring rename