次のように宣言された 2 つの PreferenceScreen 内にネストされた RingtonePreference があります。
<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 のコンテキストが気に入らなかったため、すべての設定をクリックすることによるダイアログがアプリをクラッシュさせていました。これは、各設定のコンテキストを Activity1 のコンテキストに強制することで解決された、ActivityGroup 関連の問題でした。
EditPreferences、ListPreferences、および CheckPreferences はすべて意図したとおりに機能しましたが、RingtonePreference が多くの問題を引き起こしています。着信音の選択を選択するためのダイアログが表示されますが、設定は保存されません。
リストから着信音を選択して [OK] ボタンを押しても、onPreferenceChange() または onSharedPreferenceChanged() はトリガーされません。カスタム RingtonePreference を作成して onSaveRingtone() をオーバーライドしようとしましたが、まったく呼び出されませんでした。ただし、onPrepareRingtonePickerIntent() や onRestoreRingtone() などの他のメソッドが呼び出されました。スタックオーバーフローで言及された他のオプションをたくさん試しましたが、うまくいきませんでした。RingtonePreference を機能させるためのアイデアが尽きたので、RingtoneManager を使用して独自の着信音ピッカーを開始するのが最善の方法だと思います。RingtonePreference を機能させる方法についてアドバイスをくれる人がいれば、それは素晴らしいことです。
編集:これはコンテキストの問題だと思いますが、まだ解決方法がわかりません。