我有一个实现OnPreferenceChangeListener的SettingsActivity。 在这样的回调中,我想处理SeekBar的变化:
@Override
public boolean onPreferenceChange(Preference preference, Object newValue)
{
if(preference.getTitle().equals("My Seek Bar"))
{
...
...
}
...
...
}
但尝试将偏好投射到 SeekBar 之类的内容不是一种选择。
在 OnPreferenceChange 回调中执行此操作的正确方法是什么?
答案 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
的代码类似: - )