【问题标题】:Android preference安卓偏好
【发布时间】:2011-07-29 20:51:07
【问题描述】:

我正在我的 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();
      } 
  } 

但是没有显示吐司然后我按下其中一个按钮。我在 CheckBoxPreference 上工作得很好,但我只需要一个按钮,而不是复选框。有谁可以帮忙?

【问题讨论】:

    标签: android preferences


    【解决方案1】:

    如果它只是一个简单的按钮,则没有可以更改的偏好,因此在这种情况下不会调用您的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);
    

    【讨论】:

      【解决方案2】:

      把你的代码放到

      public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
                                               Preference preference);
      

      方法。 preference 这里是被点击的偏好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-22
        • 2011-05-01
        • 2010-12-30
        • 1970-01-01
        相关资源
        最近更新 更多