我只是想做到同樣的事情。我知道這個問題有些古老,但我希望它仍然會幫助其他人。試圖獲得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
:-)
類似我在SeekBarPreference XML節點加入這一行'機器人:ID =「@ + ID /搜索條」'但如果我嘗試並獲得它SettingsActivity的onCreate用這些行'SeekBar seekBar =(SeekBar)findViewById(R.id.seekbar); seekBar.setOnSeekBarChangeListener((SeekBar.OnSeekBarChangeListener)this);''我得到一個NullPointerException。有任何想法嗎? – zhed