2010-09-15 136 views
17

我正在寻找方法来减少我在应用程序中称为“ID污染”的方法。从我所知道的来看,R.id对于应用程序来说是全局的,所以在每个活动中,我通常都会为元素创建唯一的资源ID值,即使我有许多相同的事情。举例来说,如果我有三个活动课,每一个保存和取消按钮,我会定义六个独特的ID为R.id像:R.id值的范围

R.id.actOne_save 
R.id.actOne_cancel 
R.id.actTwo_save 
R.id.actTwo_cancel 
R.id.actThree_save 
R.id.actThree_cancel 

这似乎不需要我,我真的应该只需要两个上运行任何活动。在生成资源ID时,您都使用了哪些做法?你在活动之间重复使用它们吗?如果两个Activites(可能是一个暂停的和一个前景)在同一时间存在一个id,那么可以吗?我害怕怪异的行为,就像点击按钮触击太多听众一样!

回答

20

你可以在多个元素中使用相同的id,只要它们不在同一个视图中。所以,你所有的保存按钮都可以有btn_save的ID,只要在同一个布局文件中没有两个,或者附加布局,那么你很好。

+2

谢谢,这是有道理给findViewById()从一个活动或视图,而不是应用程序调用。干杯! – Devunwired 2010-09-16 14:54:47

+1

目前只有50%是真实的,因为您可以在编辑器中看到来自外部活动的R.ids,因此您可能认为其中一个是您的,即使它不存在于您的活动中。 – user250343 2012-02-01 08:59:52

+0

@Martyn,你在“相同的观点”中究竟是什么意思?如果我有一个包含2个片段布局的活动布局,每个片段都包含一个'id =“@ + id/button_ok”,这会是一个问题,因为它们共享相同的父视图? – bcorso 2014-08-31 18:14:52

4

我用:

R.id.activityName_type_action

其中类型可以是[BTN | txtview |的EditText |列表视图...]

和行动是一样的东西[保存| del | accept | name | pin ...]

这是相当详细的,但这样我可以从活动中猜出标识符名称,而不必连续检查xml布局。

例如:

R.id.loginpin_btn_accept

R.id.loginpin_txtview_pin

1

其他的答案会的工作,但你也可以做一个save_button.xml在布局文件夹,用作为根标签的<Button>。然后在那些你需要的地方引用那个人的身份证。这意味着你只需要定义一个“保存”按钮,并在任何地方使用它。