Что я делаю
Я создаю приложение аварийной сигнализации, которое имеет интерфейс с несколькими аварийными сигналами на RecyclerView, размещенном в MainActivity. Каждый элемент тревоги состоит из кнопки selectAlarmTone
, которая открывает диалоговое окно выбора мелодии звонка. В методе onClick кнопки selectAlarmTone
внутри кода AlarmAdapter я вызвал интерфейс обратного вызова для MainActivity, который снимает намерение открыть средство выбора мелодии звонка. MainActivity также имеет метод onActivityResult
, который изменяет текст кнопки selectAlarmTone
на заголовок выбранной мелодии.
Проблема
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я, как пользователь, выбираю сигнал тревоги для одного элемента тревоги, сигнал тревоги меняется для всех элементов тревоги, что является неожиданным. Просто текст кнопки для всех остальных кнопок не меняется. Но мелодии звонка меняются для всех элементов будильника, и это видно по открытию переключателей мелодий звонков для всех других элементов будильника.
AlarmAdapter.java
....
public AlarmViewHolder(View itemView) {
super(itemView);
...
selectAlarmTone = (Button) itemView.findViewById(R.id.select_alarm);
setAlarmButton = (ToggleButton) itemView.findViewById(R.id.button_set_alarm);
...
/*
* selectAlarmTone button opens up a Ringtone Picker dialog
*
* */
final Ringtone ringtone = RingtoneManager.getRingtone(mContext, defaultRingtoneUri);
selectAlarmTone.setText(ringtone.getTitle(mContext));
selectAlarmTone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mAdapterCallback.onMethodCallback(selectAlarmTone, defaultRingtoneUri, ringtone);
}
});
...
}
MainActivity.java
...
AlarmAdapter.AdapterCallback callback = new AlarmAdapter.AdapterCallback() {
@Override
public void onMethodCallback(Button selectAlarmTone, Uri defaultRingtoneUri, Ringtone ringtone) {
mSelectAlarmTone = selectAlarmTone;
/*
* selectAlarmTone button opens up a Ringtone Picker dialog
*
* */
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
if (currentRingtoneUri == null)
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, defaultRingtoneUri);
else intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentRingtoneUri);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Alarm Tone");
startActivityForResult(intent, REQUEST_RINGTONE_PICKER);
}
...
};
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case 1:
AlarmManagerBroadcastReceiver.alarmUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
Ringtone ringtone = RingtoneManager.getRingtone(getApplicationContext(), AlarmManagerBroadcastReceiver.alarmUri);
mSelectAlarmTone.setText(ringtone.getTitle(getApplicationContext()));
currentRingtoneUri = AlarmManagerBroadcastReceiver.alarmUri;
break;
default:
break;
}
}
}
....