我想请用户确认我的应用程序设置中 CheckBoxPreference 的更改。我尝试在 OnPreferenceClickListener 和 OnSharedPreferenceChangeListener 中都放置一个 AlertDialog,但是单击首选项后,我没有成功取消 CheckBoxPreference 更改。谢谢你的帮助。
内森,我尝试了以下两个想法:
1)像这样在 PreferenceActivity 中实现 OnPreferenceClickListener :
@Override
public boolean onPreferenceClick(Preference preference) {
new AlertDialog.Builder(this)
.setTitle("Move Data to SD card")
.setMessage("This will ...... Are you sure?")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
CheckBoxPreference checkBoxPref = (CheckBoxPreference)findPreference(getString(R.string.prefSDEpisodes_key));
checkBoxPref.setChecked(!checkBoxPref.isChecked() );
}
})
.show();
return false;
}
实际上它有效,但我对这个解决方案不满意,因为用户看到 CheckBoxPrefence 的状态在对话框后面的背景中发生变化。这只是一种解决方法,包括换回盒子。这根本不干净。我需要在更改之前获得控制权。
2) 在 PreferenceActivity 中使用 onSharedPreferenceChanged() 中的类似代码实现 OnSharedPreferenceChangeListener,但在这种情况下,setNegativeButton() 中的框值的交换会以编程方式一次又一次地触发首选项更改事件。摆脱确认对话框的唯一方法是选择“是”。
如果没有简单的解决方案,我已准备好扩展 CheckBoxPrefence 但如何?我应该覆盖哪种方法?