gpt4 book ai didi

java - SwitchPreference onChecked/onClick 监听器

转载 作者:IT老高 更新时间:2023-10-28 21:12:35 29 4
gpt4 key购买 nike

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

在我说太多之前,我的问题就是这样:我似乎不能只在偏好的 Switch 部分设置监听器。我可以在首选项上设置一个 onPreferenceTreeClick 和一个 onPreferenceClick ,如果我按下文本部分,效果很好。但是当我将它从关闭更改为开启时,开关本身什么也不做。

我已阅读有关 SwitchPreference 的文档.我还查看了 android/packages/Settings,看起来 AOSP 使用的是 Switch,而不是 Wi-Fi 和蓝牙的 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 检查。我这样做只是为了测试。

picture of preference screen

编辑

希望这对其他人有帮助!感谢 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()

关于java - SwitchPreference onChecked/onClick 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11019248/

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