如何使用QuietlyCoding NumberPicker的setOnPreferenceChangeListener?

问题描述:

我想要检测NumberPicker的值何时发生更改。我有此代码对我PreferenceActivity如何使用QuietlyCoding NumberPicker的setOnPreferenceChangeListener?

public class MainPrefs extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.addPreferencesFromResource(R.xml.main_preferences); 
     this.findPreference("SMSSentLimit").setOnPreferenceChangeListener(
      new OnPreferenceChangeListener() { 

       @Override 
       public boolean onPreferenceChange(Preference preference, 
         Object newValue) { 
        TrackerService.updateStats(Long.decode(newValue.toString())); 
        return true; 
       } 
      }); 
     this.findPreference("NumberPickerLimit").setOnPreferenceChangeListener(
      new Preference.OnPreferenceChangeListener() { 

       @Override 
       public boolean onPreferenceChange(Preference preference, 
         Object newValue) { 
        Log.i("onPreferenceChange", "NumberPicker Changed"); 
        Toast.makeText(getBaseContext(), "CHANGEEEED !!!", 
         Toast.LENGTH_SHORT).show(); 
        return true; 
       } 
      }); 
    } 
} 

第二个(findPreference("NumberPickerLimit"))为NumberPicker,它永远不会被调用,如果我将其更改为onPreferenceClickListener它的工作原理,但是当我点击的偏好,而不是当我改变我检测价值。

Acording源代码应该叫:

public void onClick(DialogInterface dialog, int which) { 
     switch (which) { 
      case DialogInterface.BUTTON_POSITIVE: 
       saveValue(mPicker.getCurrent()); 
       break; 
      default: 
       break; 
     } 
    } 

private void saveValue(int val) { 
    getEditor().putInt(getKey(), val).commit(); 
    notifyChanged(); 
} 

What's发生了什么?这是一个错误吗?

编辑 这里是我的XML:

<com.michaelnovakjr.numberpicker.NumberPickerPreference 
      android:key="NumberPickerLimit" 
      android:title="@string/NumberPickerTitle" 
      android:summary="@string/NumberPickerSummary" 
      picker:defaultValue="1" 
      picker:startRange="1" 
      picker:endRange="31" /> 
+0

你'SMSSentLimit'监听器的工作原理? – UgglyNoodle

+0

是的,它的工作原理:) – Andres

+0

NumberPickerPreference是否成功保存了值?当您更改号码时,请关闭对话框并重新打开,是否显示新号码? – UgglyNoodle

只是看着上市here XML文件,看起来你有android:key="demo.preference"那里。而在这里的代码中,您使用的是findPreference("NumberPickerLimit")

+0

是的,但我改变了它,看我的编辑 – Andres

+0

对不起,现在没有更多的想法。 – UgglyNoodle

你必须自己调用监听器。取而代之的notifyChanged(),尝试callChangeListener(val)如下所示:

NumberPickerPreference