Android Studio在一个xml文件中更改ID会更改另一个文件中的ID

时间:2018-06-02 19:31:43

标签: android android-studio view refactoring rename

我曾经给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?

3 个答案:

答案 0 :(得分:2)

片刻之前,我遇到了同样的问题,我发现这是Android Studio的预期行为,因为其他元素可能会被限制为ID更改的元素。因此,您需要通过其文本编辑器更新特别是新布局文件中的所有ID,而不能从其设计编辑器的“属性”部分中更新 它对我来说很好用,因此也必须对您也很好:)

答案 1 :(得分:1)

当我将小部件从一个活动复制到另一个活动并尝试更改复制的小部件中的ID时,我也面临着同样的问题。它会提示一个对话框,然后单击“否(仅本地)” 。但是,我觉得没有使用该选项。仍然会更新旧活动中的ID。

解决方法:

请尝试通过代码(文本编辑器)(而非设计)更改ID或属性。

我认为Google应该解决此问题并删除此错误。

答案 2 :(得分:0)

我刚遇到这篇文章是因为我遇到类似的问题。我有一个不同口味的应用程序。在我的一种布局中,我有12个按钮。我想以其他方式添加所有这些按钮,再加上4个。因此,我在风味特定的目录中创建了布局的新版本。问题是,每当我尝试更改 具有ID的任何内容 时,都会更改主目录中同名的布局。

使用口味,您应该能够使用特定口味来覆盖主目录的布局。这真令人沮丧!

这必须是Android Studio中的错误。令人沮丧的是,它仍然没有固定。由于我使用其他JetBrains IDE,因此我通过JetBrains工具箱安装了Android Studio。目前,我使用的是版本3.5.3

我的解决方法

为解决此错误,我创建了一个“测试”项目。我复制了要修改的布局代码,将其粘贴到测试项目中并在那里进行了编辑。当完成所需的更改后,我在正在处理的实际项目的风味特定目录中创建了替代布局(使用与要覆盖的主目录布局相同的名称)。然后,我从测试项目中复制了布局,并将其粘贴到特定风味的文件中。这样,它不会更改项目主目录中的布局。

我的想法

您不必这样做。当然,这不是直观的方法。这就是为什么我不能相信这只是一个错误。话虽如此,我希望我能为陷入困境的任何人提供一个明确的解决方法。如果我在下面没有评论,我会澄清一下。