Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android - set ID to the view programmatically

I'm adding Buttons programmatically and the number of Buttons depends on some conditions. To add rules for RelativeLayout.LayoutParams that Buttons be aligned to the top of each other I need to set their IDs. All the answers from 2-3 years ago say that setId(int) is okay (e.g. setId(1)) but now it's forbidden (UPD. it's not ok only with int literals. With int variables everything is ok. Wonder why). How to do it nowadays?

like image 470
Justin McGuire Avatar asked Mar 18 '16 00:03

Justin McGuire


2 Answers

According to the API it's not forbidden or deprecated. Here is the best way of using it.

  1. Create res/values/ids.xml and define

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
            <item type="id" name="button1" />
            <item type="id" name="button2" />
    </resources>
    
  2. once you have that, you can than use setId

    button1.setId(R.id.button1);
    button2.setId(R.id.button2);
    
like image 56
arsent Avatar answered Nov 02 '22 03:11

arsent


Since you said you can have any number of buttons then you can set id for each button using -

button.setId(View.generateViewId()); //Works for API 17 and above

If minSdk is below 17, then you can use -

 button.setId(counter++); //Each time counter will be increment giving a unique id
like image 28
Shadab Ansari Avatar answered Nov 02 '22 03:11

Shadab Ansari