我可以在Android中的不同布局中使用相同的ID吗?

hap*_*dik 81 android android-layout

我是Android开发的新手.是否可以在图像和TextViews不同的LayoutXML文件中使用相同的ID ?

当eclipse自动为我列出它们时,它列出了项目中的所有布局变量,它会发生碰撞吗?直到现在我还没有注意到在不同布局中使用相同ID的任何问题,但我担心长远来看.

Rag*_*ood 120

简短的回答:是的,你可以.

答案很长:您可以这样做,因为每当您使用findViewById()获取对布局的一部分的引用时,该方法仅在当前膨胀的布局中查找该视图.因此,即使您在另一个布局中有另一个具有相同ID的视图,Android也不会在那里查找它.

  • 为了碰到这个问题的其他人,我想回答克洛伊的要求.每个视图的ID都相同,但永远不会在同一个激活中出现两次.作为一个比喻,考虑一下如果我给你一堆文件会发生什么,所有文件上都有一堆数字.其中一些纸上写着4号纸.你正在看其中一张床单,我请你绕圈4.这很容易.现在你看另一张带有4的纸张.您也可以找到并圈选它.这个数字是预先定义的并不重要. (19认同)
  • 你能给出更长的答案吗?因为R.id.layout_id是一个静态整数,并且在编译时是预先确定的,所以findViewById()将不知道当前膨胀的布局. (13认同)
  • @YoannHercouet我认为这是因为两者都在同一张纸上(活动) (6认同)
  • 我不同意Ted的评论,你可以同时拥有两个具有相同ID的组件在同一个Activity上运行.我刚刚在应用程序上遇到问题,我在主要活动中同时使用了两个不同的ViewPager.当我尝试检索当前使用ID显示的ViewPager时,它实际上检索了在后台运行的另一个.我通过简单地使两个ID唯一来解决问题. (4认同)

小智 87

建议您对不同的布局使用不同的ID.从长远来看,当你有很多布局并且因此有很多id时,区分它们会变得非常复杂.

我通常这样命名我的ids : layoutName_elementId.

它对我来说很容易找到我正在寻找的ID,特别是在使用自动完成时(我知道我正在使用什么布局,但我真的不知道id;在这种情况下,我的命名策略,我只键入布局名称,它会带来该布局的所有ID.

有关布局和ID的更多信息,请参见此处.

快乐的编码,

  • 在您的每次活动中都找“ ok_button”来寻找问题是什么?如果您知道要查找的聊天,则自动补全以这种方式更加清晰。 (2认同)

Ale*_*lde 19

根据开发人员API指南:

ID在整个树中不一定是唯一的,但它在您正在搜索的树的部分内应该是唯一的(通常可能是整个树,因此最好在可能的情况下完全唯一).

所以简短的回答是它不是强制性的,但避免可能的冲突是一种很好的做法.


Pav*_*ley 12

不推荐,因为如果将来你将更改视图和重构ID,Android studio将在所有xml文件和类中重构它,你将遇到麻烦.