我有一个 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 工作的建议,那就太好了。
编辑:我相信这是一个上下文问题,但我还不知道如何解决它。