2015-01-02 26 views
0

我有一個SettingsActivity實現OnPreferenceChangeListener。 裏面這樣的回調,我想處理的搜索欄的變化:OnPreferenceChange中的句柄SeekBar更改

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

但是,試圖像鑄造偏好搜索欄是不是一種選擇。

什麼是在OnPreferenceChange回調?

回答

0

您應該使用OnSeekBarChangeListener來處理與SeekBars相關的事件。

當您創建SettingsActivity,只要認準了搜索欄,並呼籲:

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

類似我在SeekBarPreference XML節點加入這一行'機器人:ID =「@ + ID /搜索條」'但如果我嘗試並獲得它SettingsActivity的onCreate用這些行'SeekBar seekBar =(SeekBar)findViewById(R.id.seekbar); seekBar.setOnSeekBarChangeListener((SeekBar.OnSeekBarChangeListener)this);''我得到一個NullPointerException。有任何想法嗎? – zhed

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 :-)