Дынамічны доступ на аснове імя ў findViewById

Выбачайце за расплывістасці назвы,

Ніжэй бяда. Я хачу выкарыстоўваць пераменны й перабіраць гэты аб'ект, які выкарыстоўвае 1 -9 значэння ў назве, ( R.id.imageButtonx )

for (int x = 1; x <10; x++)
    mm.add((Button) findViewById(R.id.imageButtonx));

// Проста пайсці крыху глыбей. Гэта для Android.

Я пачынаю з масівам кнопак, а затым я зрабіў гэта:

 main_Menu = new Button[] {
            (Button) findViewById(R.id.imageButton1),
            (Button) findViewById(R.id.imageButton2),
            (Button) findViewById(R.id.imageButton3),
            (Button) findViewById(R.id.imageButton4),
            (Button) findViewById(R.id.imageButton5),
            (Button) findViewById(R.id.imageButton6),
            (Button) findViewById(R.id.imageButton7),
            (Button) findViewById(R.id.imageButton8),
            (Button) findViewById(R.id.imageButton9)
        };

так што я мог бы зрабіць пятлю Еогеасп два радкі, каб прыкласці onbuttonclicklistener.

Таму я падумаў, што я мог бы скараціць дзесяць радкоў на два радкі. Я пераехаў у ArrayList. Я спадзяваўся, што гэта было нешта накшталт квадратных дужак або дужкі або адзінарных двукоссяў або двайных двукоссяў, каб пайсці вакол пераменнага х, а ад аднаго з адказаў, здаецца, не ўяўляецца магчымым.

0
Я мяркую, што ў вас ёсць XML-разметка, якая мае кнопкі з імем imageButton1 ... imageButton9. Гэта не вельмі добры спосаб, каб стварыць масіў кнопак для Java. Аб лепшым выпадку вы можаце зрабіць з гэтым сцэнарам, гэта загрузіць кнопкі паасобку і дадаць іх спасылкі на масіў.
дададзена аўтар scottb, крыніца
Я мяркую, што ў вас ёсць XML-разметка, якая мае кнопкі з імем imageButton1 ... imageButton9. Гэта не вельмі добры спосаб, каб стварыць масіў кнопак для Java. Аб лепшым выпадку вы можаце зрабіць з гэтым сцэнарам, гэта загрузіць кнопкі паасобку і дадаць іх спасылкі на масіў.
дададзена аўтар scottb, крыніца
Вы не можаце зрабіць гэта. Але калі вы зробіце гэта масіў (я не ведаю, калі гэта магчыма з матэрыялам макета xml Android выкарыстоўваецца) вы <�я> можна зрабіць R.id.imageButton [х] ,
дададзена аўтар 11684, крыніца
Вы не можаце зрабіць гэта. Але калі вы зробіце гэта масіў (я не ведаю, калі гэта магчыма з матэрыялам макета xml Android выкарыстоўваецца) вы <�я> можна зрабіць R.id.imageButton [х] ,
дададзена аўтар 11684, крыніца
Так у чым праблема?
дададзена аўтар arshajii, крыніца
Падзяліцеся гэтай праблемай.
дададзена аўтар Juned Ahsan, крыніца
Дзякуй за змяненне назвы.
дададзена аўтар Pat, крыніца
Дзякуй за змяненне назвы.
дададзена аўтар Pat, крыніца

10 адказы

Java ня робіць тэкставую замену «х» у imageButtonx з зменнай цыклу.

Тым не менш, вы можаце стварыць масіў ідэнтыфікатараў IMAGEBUTTON, і ставяцца да кожнага па індэксе.

4
дададзена

Java ня робіць тэкставую замену «х» у imageButtonx з зменнай цыклу.

Тым не менш, вы можаце стварыць масіў ідэнтыфікатараў IMAGEBUTTON, і ставяцца да кожнага па індэксе.

4
дададзена

Калі вы маеце на ўвазе андроіда

Выкарыстоўвайце Resources.getIdentifier() , як гэта

int id = getResources().getIdentifier("imageButton" + x, "id", null);

String s = getString(id);
0
дададзена

Калі вы маеце на ўвазе андроіда

Выкарыстоўвайце Resources.getIdentifier() , як гэта

int id = getResources().getIdentifier("imageButton" + x, "id", null);

String s = getString(id);
0
дададзена

У залежнасці ад таго, што вашы дакладных патрэбаў, вы маглі б зрабіць нешта падобнае з асобнай функцыяй, якая вяртае адну з велічынь, якія залежаць ад параметру. Нешта ўздоўж ліній:

public Button getButton(int index) {
    switch (index) {
        case 0: return button0;
        case 1: return button1;
        ...
        default: throw new ArgumentOutOfRangeException("index");
    }
}

Тады вы маглі б замяніць пятлю з чымсьці накшталт:

for (int x = 1; x < 10; x++)
    mm.add((Button) findViewById(R.id.getButton(x)));
0
дададзена

У залежнасці ад таго, што вашы дакладных патрэбаў, вы маглі б зрабіць нешта падобнае з асобнай функцыяй, якая вяртае адну з велічынь, якія залежаць ад параметру. Нешта ўздоўж ліній:

public Button getButton(int index) {
    switch (index) {
        case 0: return button0;
        case 1: return button1;
        ...
        default: throw new ArgumentOutOfRangeException("index");
    }
}

Тады вы маглі б замяніць пятлю з чымсьці накшталт:

for (int x = 1; x < 10; x++)
    mm.add((Button) findViewById(R.id.getButton(x)));
0
дададзена

Вы не можаце выкарыстоўваць зменную ў якасці часткі імя аб'екта (любое імя аб'екта, на самай справе) вы спрабуеце дадаць, я думаю.

0
дададзена

Вы не можаце выкарыстоўваць зменную ў якасці часткі імя аб'екта (любое імя аб'екта, на самай справе) вы спрабуеце дадаць, я думаю.

0
дададзена

як наконт

int[] imageButtons = { R.id.imageButton0, R.id.imageButton1, R.id.imageButton2, R.id.imageButton3, ...};
for (int x = 0; x <9; x++)
mm.add((Button) findViewById(imageButtons[i]));

Гэта павінна працаваць правільна для вас. :)

0
дададзена
Як гэта істотна адрозніваецца ад Эндзі адказ ?
дададзена аўтар Michael Kjörling, крыніца
Хм .. Гэта не так. Я думаю, мы напісалі каментары paralell, я быў больш павольна адзін. : S
дададзена аўтар András Iványi, крыніца

як наконт

int[] imageButtons = { R.id.imageButton0, R.id.imageButton1, R.id.imageButton2, R.id.imageButton3, ...};
for (int x = 0; x <9; x++)
mm.add((Button) findViewById(imageButtons[i]));

Гэта павінна працаваць правільна для вас. :)

0
дададзена
Як гэта істотна адрозніваецца ад Эндзі адказ ?
дададзена аўтар Michael Kjörling, крыніца
Хм .. Гэта не так. Я думаю, мы напісалі каментары paralell, я быў больш павольна адзін. : S
дададзена аўтар András Iványi, крыніца