Android ガイドによると、 Preference Fragments を使用して設定を実装しようとしています。Preferences.xml で次のように宣言します。
<SwitchPreference
android:key="enable_wifi"
android:title="Enable WiFi"
/>
そして、クラスよりも onCreate メソッドで PreferenceFragment を拡張します。
public class FragmentSettings extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
mEnableWifi = (SwitchPreference) findPreference(enable_wifi);
mEnableWiFi.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.i(getClass().getName(), preference.getKey()
+ String.valueOf(newValue));
}
}
その結果、ログショー内で SwitchPreferene または Switch をクリックすると得られました
enable_wifi false
enable_wifi false
enable_wifi true
enable_wifi true
そのため、リスナーが複数回呼び出されると思います。それを処理または修正する方法は?