0

実行時に作成された 10 個のボタンがあります。それらのIDを取得するにはどうすればよいですか?

private void buttons() {
    int count = 10;

    for (int i = 0; i < count; i++) {
        Button newButton = new Button(this);
        newButton.setId("button_" + i);
        LinearLayout ll = (LinearLayout)findViewById(R.id.linear);
        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        ll.addView(newButton,lp);
    }

}

私がしなければならないことは...

button_1.getX();
4

4 に答える 4

3

あなたの質問は整形式ではありません。ID自体を取得したくないと思いますが、代わりに、Button名前がわからないIDにアクセスしたいと考えています。したがって、基本的にはこれを達成することはできませんididinの概念を完全に誤解しています。これはオブジェクトView内のフィールドでViewあり、特定のオブジェクトを識別するために使用できますが、フィールド名として使用することはできません。したがって、 1.getX() (1ボタンの ID ) 不可能です。

Buttonあなたが望むのは、( b1、b2、b3、b4などと呼ばれるsの束を作成する代わりに) Buttonsの配列を作成し、インデックスでそれらにアクセスすることです:

private void buttons() {
    int count = 10;

    Button [] buttons = new Button[count];

    for (int i = 0; i < count; i++) {
        buttons[i] = new Button(this);
        LinearLayout ll = (LinearLayout)findViewById(R.id.linear);
        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        ll.addView(buttons[i],lp);
    }

}

次に、配列内の特定の位置にあるオブジェクトにアクセスするだけで、特定のボタンに簡単にアクセスできます。

buttons[id].getX()

関数内でこの配列を作成しましたが、もちろん、関数の外からアクセスしたい場合は、たとえばクラスのフィールドとして宣言することをお勧めします。

于 2013-01-30T17:33:10.413 に答える
1

動的に作成されたボタンの ID を設定しない限り、特定の ID はありません。したがって、これらのボタンを作成している間に、次のように言ってIDを設定します

button.setId(何か)

その後

ボタン.getId()
于 2013-01-30T17:31:08.217 に答える
0

ビューのgetId () メソッドを使用します。

button_1.getId();
于 2013-01-30T17:29:55.990 に答える
0

ボタンのインスタンスを追跡します。コードでコントロールを作成するときは、ID を使用しないでください。

例えば:

Map<Integer, Button> buttons = new HashMap<Integer, Button>()

for (int i = 0; i < count; i++) {
        Button newButton = new Button(this);
    buttons.add(i, newButton);
    ...
}
于 2013-01-30T17:31:06.300 に答える