Необходимо присвоить кнопке, созданной программно в цикле, отдельный onClickListener. Я написал свой код, но он каждой кнопке присваивает Listener последней созданной. В чём моя ошибка?
Cursor pc;
while (pc.moveToNext()) {
deleteNum = new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
ContID = Long.decode(ID);
String queryPhone = ContactsContract.Contacts.Data.RAW_CONTACT_ID + "='" + ContID + "'";
String queryByNumber = ContactsContract.CommonDataKinds.Phone.NUMBER + "='" + nomer + "'";
removePhoneByNumber(ContID, nomer, queryPhone ,queryByNumber);
}
catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "Запущен процесс удаления", Toast.LENGTH_SHORT).show();
}
};
ImageView phoneD = new ImageView(this);
phoneD.setImageResource(R.drawable.delete_4590);
phoneD.setLayoutParams(butParams);
phoneD.setOnClickListener(deleteNum);
phoneD.setTag("Delete" + i);
layout.addView(phoneD);
}
Ваша ошибка в том, что вы присваиваете кнопкам ссылку на слушатель нажатий. А этой ссылке вы в каждой итерации присваиваете новый объект-слушатель. Таким образом у вас n раз создаётся новый объект-слушатель, но он присваивается в одну и ту же переменную которую вы и назначаете кнопке.
Вам надо для каждой кнопки создать отдельную переменную-слушатель и её кнопкам назначать.
Cursor pc;
while (pc.moveToNext()) {
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
ContID = Long.decode(ID);
String queryPhone = ContactsContract.Contacts.Data.RAW_CONTACT_ID + "='" + ContID + "'";
String queryByNumber = ContactsContract.CommonDataKinds.Phone.NUMBER + "='" + nomer + "'";
removePhoneByNumber(ContID, nomer, queryPhone ,queryByNumber);
}
catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "Запущен процесс удаления", Toast.LENGTH_SHORT).show();
}
};
ImageView phoneD = new ImageView(this);
phoneD.setImageResource(R.drawable.delete_4590);
phoneD.setLayoutParams(butParams);
phoneD.setOnClickListener(listener);
phoneD.setTag("Delete" + i);
layout.addView(phoneD);
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей