gpt4 book ai didi

未调用 Android PreferenceScreen onChangeListener

转载 作者:行者123 更新时间:2023-11-29 18:15:50 24 4
gpt4 key购买 nike

我写了一个简单的PreferenceScreen,如下所示:

public class SettingsActivity extends PreferenceActivity implements OnPreferenceChangeListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);

PreferenceScreen prefScreen = getPreferenceScreen();
prefScreen.setOnPreferenceChangeListener(this);

}

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (preference.getTitle().equals(getString(R.string.settings_diverse_about))) {
// TODO open about dialog
}

return super.onPreferenceTreeClick(preferenceScreen, preference);
}

private static String PATTERN_EMAIL = "[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}";
private static String PATTERN_TWITTER = "[a-zA-Z0-9_-]+";

@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String prefTitle = preference.getTitle().toString();

// phone will be fully handled by inputType

String newStr = newValue.toString();

if (prefTitle.equals(getString(R.string.settings_contact_email))) {
return newStr.trim().matches(PATTERN_EMAIL);
} else if (prefTitle.equals(getString(R.string.settings_contact_twitter))) {
return newStr.trim().matches(PATTERN_TWITTER);
}

return true;
}

问题是,永远不会调用 onPreferenceChange 方法。此外,您如何看待验证属性的方式?我认为这并不是最佳选择。

preference.getTitle().equals(getString(R.string.settings_diverse_about))

最佳答案

我遇到了同样的问题。我试图设置一个 onPreferenceChangeListener 但那是错误的。我真正需要的是一个 onSharedPreferenceListener。

OnSharedPreferenceChangeListener listener;

将此写在您的 Preference Activity 的 onCreate() 中:

listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
// Here you can work.
// IMPORTANT: Beware that at this point the preference has already been changed!
}
};

SharedPreferences prefs = getSharedPreferences(getPackageName() + "_preferences", MODE_PRIVATE);
prefs.registerOnSharedPreferenceChangeListener(listener);

关于未调用 Android PreferenceScreen onChangeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8157217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com