Get View ids in a for loop programatically?

6.4k Views Asked by At

I simply want to know . is there a way to create an id's using for loop

I have 10 buttons in xml . there id's are button1,button2,button3... button10 Now i create an Array of Button in java class and do it like this

public class Menu extends Activity
{
    Button[] arrayButton=new Button[10];

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu);

        init();
    }

    private void init()
    {
        for(int i=1 ; i<9 ; i++)
        {
            String abc = "but"+String.valueof(i);
            int x = Integer.parseInt(abc);


            Log.d("abc", abc);

            Log.d("x", String.valueOf(x) );

            //arrayButton[i] = (Button) findViewById(R.id.x);  // giving error 

            //arrayButton[i].setText("Hello:");
        }
    }

}

I want to know how can i do this kind of work . Getting all button using for loop to make my work faster and some time when i want to set the text of all the buttons .

4

There are 4 best solutions below

2
On BEST ANSWER

use getResources().getIdentifier like

String abc = "but"+String.valueof(i);
int resID = getResources().getIdentifier(abc, "id", getPackageName());
arrayButton[i] = (Button) findViewById(resID );
arrayButton[i].setText("Hello:");

i.e. simply rewrite init() method as

private void init()
    {
        for(int i=1 ; i<9 ; i++)
        {
            String abc = "but"+String.valueof(i);
            int resID = getResources().getIdentifier(abc, "id", getPackageName());
            arrayButton[i] = (Button) findViewById(resID);
            arrayButton[i].setText("Hello:");
        }
    }

Or simple you may use

    int[] buttonIDs = new int[] {R.id.but1, R.id.but2, R.id.but3,R.id.but4, ... }
    for(int i=0; i<buttonIDs.length; i++) {
        Button b = (Button) findViewById(buttonIDs[i]);
        b.setText("Hello:" + b.getText().toString());
}
5
On

If you already know all the ids, you can simply use:

int [] ids = new int [] {R.id.btn1, R.id.btn2, ...};
Button [] arrayButton = new Button[ids.length];

for(int i=0 ; i < arrayButton.length ; i++)
{
  arrayButton[i] = (Button) findViewById(ids[i]);
}

Or if you don't know them, use:

getResources().getIdentifier("btn1","id",getPackageName())
0
On

Try this way,hope this will help you to solve your problem.

main.xm

    <LinearLayout
        android:id="@+id/lnrMain"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/button5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/button6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/button7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/button8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/button9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/button10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>
</LinearLayout>

MainActvity.java

public class MainActivity extends Activity {

    private LinearLayout lnrMain;
    private Button[] arrayButton;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lnrMain = (LinearLayout) findViewById(R.id.lnrMain);
        arrayButton=new Button[10];
        init();
    }

    private void init()
    {
        for(int i=0;i<lnrMain.getChildCount() ; i++)
        {
            arrayButton[i] = (Button) lnrMain.getChildAt(i);
            arrayButton[i].setText("Hello:"+(i+1));
        }
    }

}
0
On

You can create a helper void like:

public static int getResourceID(Context mContext, String StrId) {
    return mContext.getResources().getIdentifier(StrId, "id", mContext.getPackageName());
}