处理OnPreferenceChange中的SeekBar更改

时间:2015-01-02 18:07:04

标签: android user-interface listener seekbar

我有一个实现OnPreferenceChangeListener的SettingsActivity。 在这样的回调中,我想处理SeekBar的变化:

@Override
public boolean onPreferenceChange(Preference preference, Object newValue)
{
    if(preference.getTitle().equals("My Seek Bar"))
    {
        ...
        ...
    }
    ...
    ...
}

但尝试将偏好投射到 SeekBar 之类的内容不是一种选择。

OnPreferenceChange 回调中执行此操作的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

您应该使用OnSeekBarChangeListener来处理与SeekBars相关的事件。

创建SettingsActivity时,只需查找SeekBar并调用:

 seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
      ... your code ....
   }
 });

答案 1 :(得分:0)

我只是想做同样的事情。我知道这个问题有些陈旧但我希望它仍能帮助其他人。试图将SeekBarPreference作为SeekBar不起作用,NullPointerException将会被抛出,因为它已被提及。

这是一个似乎有用的最小例子。

假设您有一个使用此xml创建的首选项屏幕:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<SeekBarPreference
    android:id="@+id/slider"
    android:defaultValue="35"
    android:max="100"
    android:title="Slide it"
    android:key="sliderValue">
</SeekBarPreference>

</PreferenceScreen

您可以在PreferenceActivity

中获得相同的值
 public class Preferences extends PreferenceActivity implements
    SharedPreferences.OnSharedPreferenceChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.preferences);
         SharedPreferences prefs = PreferenceManager
                 .getDefaultSharedPreferences(this);
         prefs.registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
         // here you get the new slider value
         int newSliderValue = sharedPreferences.getInt("sliderValue", 0);
    }
}

对我来说,棘手的部分是将共享首选项注册到更改侦听器。谢天谢地,我发现here

我想Preference Fragment的代码类似: - )