Android: использование findViewById() со строкой / в цикле
Я делаю приложение для android, где есть представление, состоящее из сотен кнопок, каждая с определенным обратным вызовом. Теперь я хотел бы установить эти обратные вызовы с помощью цикла, вместо того, чтобы писать сотни строк кода (для каждой из кнопок).
мой вопрос: Как я могу использовать findViewById без статического ввода каждого идентификатора кнопки? Вот что я хотел бы сделать:
for(int i=0; i<some_value; i++) {
for(int j=0; j<some_other_value; j++) {
String buttonID = "btn" + i + "-" + j;
buttons[i][j] = ((Button) findViewById(R.id.buttonID));
buttons[i][j].setOnClickListener(this);
}
}
спасибо заранее!
7 ответов:
вы должны использовать
getIdentifier()
for(int i=0; i<some_value; i++) { for(int j=0; j<some_other_value; j++) { String buttonID = "btn" + i + "-" + j; int resID = getResources().getIdentifier(buttonID, "id", getPackageName()); buttons[i][j] = ((Button) findViewById(resID)); buttons[i][j].setOnClickListener(this); } }
вы можете попробовать сделать int [], который содержит все ваши идентификаторы кнопок, а затем повторить это:
int[] buttonIDs = new int[] {R.id.button1ID, R.id.button2ID, R.id.button3ID, ... } for(int i=0; i<buttonIDs.length; i++) { Button b = (Button) findViewById(buttonIDs[i]); b.setOnClickListener(this); }
можно использовать тег, если вы хотите получить доступ.
на
onClick
int i=Integer.parseInt(v.getTag);
но вы не можете получить доступ к этой кнопке, как это.
просто создать кнопку программно
by
Button b=new Button(this);
создать пользовательскую кнопку в java-коде, а не в Xml, как я показал ниже
Button bs_text[]= new Button[some_value]; for(int z=0;z<some_value;z++) { try { bs_text[z] = (Button) new Button(this); } catch(ArrayIndexOutOfBoundsException e) { Log.d("ArrayIndexOutOfBoundsException",e.toString()); } }
Если ваш вид верхнего уровня имеет только те виды кнопок, как дети, вы можете сделать
for (int i = 0 ; i < yourView.getChildCount(); i++) { Button b = (Button) yourView.getChildAt(i); b.setOnClickListener(xxxx); }
Если есть больше представлений, вам нужно будет проверить, является ли выбранная одна из ваших кнопок.