android - 尝试为 EditTextPreference 创建一个确认对话框

标签 android android-alertdialog android-preferences

我正在尝试向 Android 应用程序中的 EditTextPreference 添加确认对话框。我想让它问“你真的确定要这样做吗?”每当他们尝试更改 ID 时,但他们必须仍然可以在需要时这样做。

现在,我尝试环顾四周并尝试了我找到的几种解决方案,但无法让其中任何一种发挥作用。看起来最有前途的解决方案是使用以下代码:

AlertDialog alertDialog = new AlertDialog.Builder(PreferencesActivity.this).create();

创建一个对话框,要求在 onSharedPreferenceChanged 方法中确认是否正在更改 ID。问题是构建器不会让我使用该上下文。我已经好几年没有真正为 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()); 
      }

    }
}

最佳答案

可以在 setOnPreferenceChangeListener 监听器中添加一个 AlertDialog

我试过这种方式:

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

关于android - 尝试为 EditTextPreference 创建一个确认对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49733296/

相关文章:

android - 在 Android 中抓取帧视频到 Gif

android - 与 CoordinatorLayout 和 CollapsingToolbarLayout 结合使用时,共享元素转换不起作用

android - 在同一 Activity 中显示 2 个警报对话框

java - 在 Android 中关闭警报对话框后,如何在 Activity 调用上刷新 TextView?

安卓闹钟界面

android - 放置在 NavigationDrawer 顶部的 fragment

Android检测清除数据以刷新小部件

android - 检测 Xoom 浏览器 (Android)

java - 如何通过单击按钮将 ListView 中的数据传递到购物车列表(新 Activity )。我插入 ListView 的数据使用 SQLite

android - 首先在子级的父级上关闭alertDialog Android removeView()