Есть несколько однотипных кнопок Button в приложении, изначально они прописывались обычным способом:
Button exec1Set1 = (Button) findViewById(R.id.exec1Set1);
exec1Set1.setOnClickListener(onClickListener);
Внутри обработчика события onClickListener текст с данных кнопок сохраняется в виде JSON для последующего сохранения в БД:
JSONObject ex1 = new JSONObject();
try {
ex1.put("set1",exec1Set1.getText().toString());
ex1.put("set2",exec1Set2.getText().toString());
}
Для оптимизации решил создавать кнопки динамически как в одном из примеров на SO - пример на GitHub. Теперь никак не пойму как мне для этих кнопок также упаковывать текст в JSON. Пробовал делать через цикл:
int i = (int) v.getTag();
while( i < 3 ){
ex1.put( "set" + i,((Button) v).getText().toString() );
i++;
}
но он получается не срабатывает вообще - значения в JSON ( в данном случае с предполагаемыми именами "set0", "set1" и "set2") не добавляются.
UPD:
Кнопки создаются следующим образом:
private List<Button> buttons;
private static final int[] BUTTON_IDS = {
R.id.exec1Set1,
R.id.exec1Set2,
R.id.exec1Set3,
R.id.exec2Set1,
R.id.exec2Set2,
R.id.exec2Set3,
R.id.exec3Set1,
R.id.exec3Set2,
R.id.exec3Set3,
R.id.btnSave
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game_board_view);
buttons = new ArrayList<Button>(BUTTON_IDS.length);
int position = 0;
for (int id: BUTTON_IDS) {
Button button = (Button) rootView.findViewById(id);
button.setOnClickListener(onClickListener);
button.setTag(position++);
buttons.add(button);
}
}
Обработчик события click:
@Override
public void onClick(View v) {
JSONObject ex1 = new JSONObject();
try {
int i = (int) v.getTag();
while( i < 3 ){
ex1.put( "set" + i,((Button) v).getText().toString() );
i++;
}
}
switch ((int) v.getTag()) {
case 0:
// действия
break;
case 1:
// действия
break;
// ...
}
В чем моя ошибка?
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники