SwitchPreference onChecked / onClick侦听器

我整夜都在绞尽脑汁,但似乎无法完成这一小事情。我想将SwitchPreference添加到我的应用程序的PreferenceActivity中。下面是一张图片。

在我说太多之前,我的问题恰好是这样的:我似乎无法仅在首选项的Switch部分上放置一个侦听器。我可以在首选项上设置onPreferenceTreeClick和onPreferenceClick,如果按文本部分,效果很好。但是,当我将开关从OFF更改为ON时,Switch本身什么也不做。

我已经阅读了SwitchPreference上的文档。我还查看了android

/ packages / Settings,看起来AOSP使用的是Switch,而不是Wi-Fi和Bluetooth的SwitchPreference。

这是我的尝试(如果您按整个首选项,则可以,但是如果您只按Switch,则不可以):

样品:

public class Preferences extends SherlockPreferenceActivity {

public static final String PREF_THEME = "pref_theme_interface";

public static final String PREF_ROOT = "pref_root";

public static final String PREF_APP = "pref_app";

public static SharedPreferences mTheme;

private static SharedPreferences mUpdate;

public static SharedPreferences.Editor mEditor;

public boolean SDK_COMPAT = true;

boolean pSwitch = false;

boolean update = true;

Preference autoUpdate;

@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case android.R.id.home:

this.finish();

break;

}

return super.onOptionsItemSelected(item);

}

@Override

protected void onCreate(Bundle savedInstanceState) {

setTheme(MainActivity.THEME);

super.onCreate(savedInstanceState);

final ActionBar actionBar = getSupportActionBar();

actionBar.setHomeButtonEnabled(true);

actionBar.setDisplayHomeAsUpEnabled(true);

actionBar.setIcon(R.drawable.ic_preferences);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {

SDK_COMPAT = false;

}

mUpdate = PreferenceManager.getDefaultSharedPreferences(this);

update = mUpdate.getBoolean("update", false);

// Load the preferences from an XML resource

addPreferencesFromResource(R.xml.preferences);

setPreferenceScreen(createPreferenceSDK());

}

private PreferenceScreen createPreferenceSDK() {

// Root

PreferenceScreen root = (PreferenceScreen)findPreference(PREF_ROOT);

PreferenceCategory prefApp = (PreferenceCategory)findPreference(PREF_APP);

//root.addPreference(prefApp);

if (SDK_COMPAT == true) {

pSwitch = true;

autoUpdate = new SwitchPreference(this);

autoUpdate.setKey("auto_update_pref");

autoUpdate.setTitle(R.string.auto_update);

//autoUpdate.setSummary(update == false ? "Disabled" : "Enabled");

prefApp.addPreference(autoUpdate);

} else {

pSwitch = false;

autoUpdate = new CheckBoxPreference(this);

autoUpdate.setKey("auto_update_pref");

autoUpdate.setTitle(R.string.auto_update);

autoUpdate.setSummary(R.string.auto_update_summary);

prefApp.addPreference(autoUpdate);

}

autoUpdate.setOnPreferenceClickListener(new OnPreferenceClickListener() {

public boolean onPreferenceClick(Preference preference) {

mEditor = mUpdate.edit();

boolean checked = ((SwitchPreference) preference)

.isChecked();

if (checked) {

update = true;

mEditor.putBoolean("update", true);

mEditor.commit();

autoUpdate.setSummary(update == false ? "Disabled" : "Enabled");

} else {

update = false;

mEditor.putBoolean("update", false);

mEditor.commit();

autoUpdate.setSummary(update == false ? "Disabled" : "Enabled");

}

return true;

}

});

return root;

}

因此,如果我迷失了你,我要重申我的问题。如何在SwitchPreference的Switch部分上设置侦听器?如果它是如此明显,请好心。昨晚很晚,当我尝试添加此内容时。

提前非常感谢您。

注意:1.我不反对坚持使用CheckBoxPreference,但是我更喜欢使用Switch,因为它看起来不错。

  1. 是的,我知道有更轻松/更好的选择吗?使用res / xml和res / xml-v14添加动态首选项的方法,而不是执行SDK检查。我只是做了测试。

偏好屏幕的图片

希望这可以帮助其他人!感谢Tushar的建议:-)

autoUpdate.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

@Override

public boolean onPreferenceChange(Preference preference,

Object newValue) {

boolean switched = ((SwitchPreference) preference)

.isChecked();

update = !switched;

mEditor = mUpdate.edit();

mEditor.putBoolean("update", update);

mEditor.commit();

autoUpdate.setSummary(update == false ? "Disabled" : "Enabled");

return true;

}

});

回答:

使用setOnPreferenceChangeListener()代替setOnPreferenceClickListener()

以上是 SwitchPreference onChecked / onClick侦听器 的全部内容, 来源链接: utcz.com/qa/411686.html

回到顶部