我正在尝试向Android应用中的EditTextPreference添加确认对话框。我想让它问“你真的确定要这么做吗?”每当他们尝试更改ID时,他们仍然可以在需要时这样做。
现在,我已经尝试过四处寻找并尝试了几种我已经找到的解决方案,但却无法让它们发挥作用。似乎最有希望的解决方案是使用此代码:
AlertDialog alertDialog = new AlertDialog.Builder(PreferencesActivity.this).create();
如果ID正在被更改,则创建一个对话框,要求在onSharedPreferenceChanged方法中进行确认。问题是构建器不会让我使用该上下文。我好几年没有为android编程了,但感觉我错过了一些简单的东西......我做错了什么?
public class PrefFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.qta_check_in_settings);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onResume() {
super.onResume();
for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); ++i) {
Preference preference = getPreferenceScreen().getPreference(i);
if (preference instanceof PreferenceGroup) {
PreferenceGroup preferenceGroup = (PreferenceGroup) preference;
for (int j = 0; j < preferenceGroup.getPreferenceCount(); ++j) {
updatePreference(preferenceGroup.getPreference(j));
}
} else {
updatePreference(preference);
}
}
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
updatePreference(findPreference(key));
}
private void updatePreference(Preference preference) {
if (preference instanceof ListPreference) {
ListPreference listPreference = (ListPreference) preference;
listPreference.setSummary(listPreference.getEntry());
}
if (preference instanceof EditTextPreference){
EditTextPreference editTextPref = (EditTextPreference) preference;
if(editTextPref.getKey().equalsIgnoreCase("ID")){
if(editTextPref.getText().equals("")){
editTextPref.setText(ID.randomID().toString());
}
}
if(editTextPref.getKey().equalsIgnoreCase("versionNumber")){
if(editTextPref.getText().equals("")){
editTextPref.setText("Static.VERSION");
editTextPref.setEnabled(false);
}
}
preference.setSummary(editTextPref.getText());
}
}
}
答案 0 :(得分:1)
可以在AlertDialog
侦听器中添加setOnPreferenceChangeListener
。
new AlertDialog.Builder(getActivity().getApplicationContext())
.setTitle("Are you sure?")
.setMessage("Are you sure you want to change this preference?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((EditTextPreference)preference).setValue((String) newValue);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();