尝试创建EditTextPreference的确认对话框

时间:2018-04-09 12:44:58

标签: android android-alertdialog android-preferences

我正在尝试向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()); 
      }

    }
}

1 个答案:

答案 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();