安卓偏好

标签 android preferences

我正在我的 Android 应用程序中创建备份和恢复选项。然后打开首选项“我想要一个备份按钮和一个恢复按钮”。 我在 xml/preference.xml 文件中制作按钮,如下所示:

<PreferenceCategory android:title="Backup">
    <Preference
        android:key="backup"
        android:title="Backup"
        android:summary="Make a backup of shows"
    />
    <Preference
        android:key="restore"
        android:title="Restore"
        android:summary="Restore shows from backup"
    />
</PreferenceCategory>

我的首选项类实现了 OnSharedPreferenceChangeListener,并将 getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 添加到 onResume()getPreferenceScreen( ).getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);OnPause()

i 实现 onSharedPreferenceChanged:

  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
      // Let's do something when my counter preference value changes
      if (key.equals("backup")) {
          Toast.makeText(this, "Backup button pressed", Toast.LENGTH_SHORT).show();
      } else if (key.equals("restore")) {
          Toast.makeText(this, "Restore button pressed", Toast.LENGTH_SHORT).show();
      } 
  } 

但是当我按下其中一个按钮时,没有显示任何 toast 。我在 CheckBoxPreference 上工作得很好,但我只需要一个按钮,而不是复选框。有人可以帮忙吗?

最佳答案

如果它只是一个简单的按钮,则没有可以更改的首选项,因此在这种情况下不会调用您的onSharedPreferenceChanged

改用 OnClick 监听器:

OnPreferenceClickListener btnListener = new OnPreferenceClickListener() {
    @Override
    public boolean onPreferenceClick(Preference preference) {
        final String key = preference.getKey();

        if (key.equals("backup")) {
            // show toast
            return true; // we handled the click
        }
        return false; // we didn't handle the click
    }
};

Preference prefBtn = findPreference("backup");
prefBtn.setOnPreferenceClickListener(btnListener);

关于安卓偏好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5550639/

相关文章:

android - TextView 和工具栏标题之间​​的共享元素转换

android - 从 Assets 文件夹中打开 HTML 文件

Java 如何使用首选项 API?这些变量存储在哪里?

java - 偏好 API 存储

android - 已弃用的方法 : getPreferenceScreen

iphone - 如何在运行时更改 iPhone 应用程序首选项设置?

Android:如何追踪 InflateException 的来源?

android - RxBinding 与 RadioGroup 和 CheckBoxes

Android 视频精准搜索

android - 使首选项看起来已禁用,但仍会注册点击