У меня есть RingtonePreference, вложенный в 2 PreferenceScreen, объявленный как:
<PreferenceScreen
//other preferences
<PreferenceScreen
//other preferences
<RingtonePreference
android:key="ringtone"
android:title="@string/ringtone_title"
android:summary="@string/sipringtone_ringtone_summary"
android:ringtoneType="ringtone" />
/>
/>
PreferenceFragment как таковой вложен в ActivityGroup. Путь к фрагменту следующий: MainActivity(TabActivity)->Activity1(ActivityGroup)->Activity2(Activity)->PreferenceFragment
Я не писал этот код, но продолжаю с того места, где кто-то остановился. Диалоговые окна при выборе каждой настройки приводили к сбою приложения, потому что ему не нравился контекст Activity2. Это была проблема, связанная с ActivityGroup, которая была решена путем приведения контекста каждого предпочтения к контексту Activity1.
EditPreferences, ListPreferences и CheckPreferences работали как положено, но RingtonePreference доставляет мне много хлопот. Хотя диалоговое окно появляется, чтобы позволить мне выбрать мелодии звонка, оно не сохраняет настройки.
Выбор мелодии звонка из списка и нажатие кнопки OK не запускает onPreferenceChange() или onSharedPreferenceChanged(). Я попытался создать собственный RingtonePreference и переопределить onSaveRingtone(), но это вообще не вызывалось. Однако вызывались другие методы, такие как onPrepareRingtonePickerIntent() и onRestoreRingtone(). Я попробовал кучу других вариантов, которые упоминались при переполнении стека, но безуспешно. У меня заканчиваются идеи, чтобы заставить RingtonePreference работать, и я думаю, что запуск моего собственного средства выбора мелодии с помощью RingtoneManager — лучшая альтернатива. Если бы кто-нибудь мог дать мне несколько советов о том, как заставить RingtonePreference работать, это было бы здорово.
Изменить: я считаю, что это проблема контекста, но я пока не могу понять, как ее решить.