以编程方式获取for循环中的View ID?

时间:2014-08-12 07:20:52

标签: android view android-resources r.java-file android-identifiers

我只是想知道。有没有办法使用for循环

创建一个id

我在xml中有10个按钮。 id button1,button2,button3... button10现在我在java class中创建一个数组按钮并按照这样做

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:");
        }
    }

}

我想知道我该怎么做这种工作。使用for循环获取所有按钮可以使我的工作更快,有时我想设置所有按钮的文本。

5 个答案:

答案 0 :(得分:3)

使用getResources().getIdentifier之类的

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

即。只需将init()方法重写为

即可
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:");
        }
    }

或者你可以使用

    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());
}

答案 1 :(得分:2)

如果您已经知道所有ID,则可以使用:

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]);
}

或者,如果您不了解它们,请使用:

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

答案 2 :(得分:2)

请尝试这种方式,希望这有助于您解决问题。

<强> 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));
        }
    }

}

答案 3 :(得分:0)

试试这个,这个示例适用于textview,您可以根据自己的要求进行自定义。

 public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            rr = new RelativeLayout(this);

            b1 = new Button(this);
            b1.setId(R.id.Button01);
            recent = b1;
            b1.setText("Click me");
            rr.addView(b1);               
            setContentView(rr);        
            b1.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    tv1 = new TextView(can.this);
                    tv1.setId((int)System.currentTimeMillis());
                    lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
                    lp.addRule(RelativeLayout.BELOW, recent.getId());
                    tv1.setText("Time: "+System.currentTimeMillis());
                    rr.addView(tv1, lp);
                    recent = tv1;
                }
            });
        }

答案 4 :(得分:0)

您可以创建一个帮助器void,如:

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