views:

50

answers:

3

Hey Folks -

I'm looking for ways to reduce what I would call "id pollution" in my apps. From what I can tell, R.id is global to the application, so in every Activity I usually create unique resource id values for elements, even if I have many of the same thing. For example, if I have three Activity classes, each with a save and cancel button, I would define six unique id's for R.id like:

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

This seems unnecessary to me, as I should really only need two running on any Activity. What are some of the practices that you all use when generating resource ids? Do you reuse them between activites? Is that OK if an id exists on two Activites (maybe one paused and one foreground) at the same time? I'm afraid of weird behavior like a button click hitting too many listeners!

+3  A: 

You're fine to use the same id across multiple elements, as long as they aren't in the same view. So, all your save buttons could have the id of btn_save and as long as there aren't two of them in the same layout file, or attached layouts, then you're fine.

Martyn
Thanks, that makes sense given findViewById() is called from an Activity or View, instead of the Application. Cheers!
Wireless Designs
+1  A: 

I use:

R.id.activityName_type_action

where type may be [btn|txtview|edittext|listview...]

and action is something like [save|del|accept|name|pin...]

It's pretty verbose, but this way I can guess the identifier name from the activity without having to continuosly check the xml layout.

For example:

R.id.loginpin_btn_accept

R.id.loginpin_txtview_pin

Maragues
A: 

The other answers will work, but you could also make a save_button.xml in your layout folder, with <Button> as the root tag. Then reference that guy's id in those places that you need it. This means you only need to define one "save" button, and use it everywhere.

Josh