5

我只是想知道。有没有办法使用 for 循环创建一个 id

我在 xml 中有 10 个按钮。有 id现在我在其中button1,button2,button3... button10 创建一个Button 数组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 循环获取所有按钮以使我的工作更快,并且有时我想设置所有按钮的文本。

4

5 回答 5

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());
}
于 2014-08-12T07:27:34.397 回答
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())
于 2014-08-12T07:27:46.687 回答
2

试试这个方法,希望这能帮助你解决你的问题。

主文件

    <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>

MainActivity.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));
        }
    }

}
于 2014-08-12T07:29:39.680 回答
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;
                }
            });
        }
于 2014-08-12T07:28:41.320 回答
0

您可以创建一个辅助 void,例如:

public static int getResourceID(Context mContext, String StrId) {
    return mContext.getResources().getIdentifier(StrId, "id", mContext.getPackageName());
}
于 2018-05-03T15:32:51.380 回答