Android 具有最多可选选项数的ListPreference
我希望在我的首选项菜单中有一个元素可以执行以下操作:Android 具有最多可选选项数的ListPreference,android,android-preferences,Android,Android Preferences,我希望在我的首选项菜单中有一个元素可以执行以下操作: public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { //Code to calcuate how many are selected int code = numberSelected(); if (count > 2) { sharedPreferences.edit()
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
//Code to calcuate how many are selected
int code = numberSelected();
if (count > 2) {
sharedPreferences.edit().putBoolean(key,false).commit();
Toast.makeText(this,"Can't select more than two!",Toast.LENGTH_LONG).show();
}
}
- 显示选项列表
- 许多是可选择的
- 要选择的最大选项数2
首选项屏幕
,并将选项显示为复选框
,但我不知道将max 2选项的逻辑放在何处对话框首选项
并手动执行最好的方法是什么?扩展
对话框首选项
将使您在外观和感觉上最接近;根据我的经验,首选项
类是相当不灵活和不可扩展的
关于首选项屏幕
,我记不太多了,但我想它是相似的
在我开发的一个应用程序中,我们最终使用了单独的活动,通过
Intent
从Preference
项onClick启动。这使我们能够轻松开发需要比通常更复杂的验证逻辑的首选项屏幕。扩展对话框首选项
将使您在外观和感觉方面最接近;根据我的经验,首选项
类是相当不灵活和不可扩展的
关于首选项屏幕
,我记不太多了,但我想它是相似的
在我开发的一个应用程序中,我们最终使用了单独的活动,通过
Intent
从Preference
项onClick启动。这使我们能够轻松开发需要比通常更复杂的验证逻辑的首选项屏幕。您可以将最多两个选项的逻辑放在一个屏幕中
因此,您只需在所有首选项更改时聆听它们,如果选择了无效的组合,则更新它们
因此,您的代码如下所示:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
//Code to calcuate how many are selected
int code = numberSelected();
if (count > 2) {
sharedPreferences.edit().putBoolean(key,false).commit();
Toast.makeText(this,"Can't select more than two!",Toast.LENGTH_LONG).show();
}
}
如果您自己创建了一个实现共享首选项ChangeListener的OnSharedPreferenceChangeListener
,那么您可以仅在需要执行以下操作时启用侦听器进行侦听:
@Override
protected void onResume() {
super.onResume();
//Register the listener
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// Unregister the listener
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
您可以将最多两个选项的逻辑放在一个表中 因此,您只需在所有首选项更改时聆听它们,如果选择了无效的组合,则更新它们 因此,您的代码如下所示:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
//Code to calcuate how many are selected
int code = numberSelected();
if (count > 2) {
sharedPreferences.edit().putBoolean(key,false).commit();
Toast.makeText(this,"Can't select more than two!",Toast.LENGTH_LONG).show();
}
}
如果您自己创建了一个实现共享首选项ChangeListener的OnSharedPreferenceChangeListener
,那么您可以仅在需要执行以下操作时启用侦听器进行侦听:
@Override
protected void onResume() {
super.onResume();
//Register the listener
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// Unregister the listener
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
这就是我所做的:*从DialogPreference扩展。*在onCreateDialogView上,我使用不同的复选框创建布局。*“我的值”加载到由标记分隔的字符串中。*创建了一个从字符串转换为int[]的类,反之亦然。**此类使用HashSet并具有maxSize。这是一种黑客行为,但有效:)谢谢Christopher。这就是我所做的:*从DialogPreference扩展。*在onCreateDialogView上,我使用不同的复选框创建布局。*“我的值”加载到由标记分隔的字符串中。*创建了一个从字符串转换为int[]的类,反之亦然。**此类使用HashSet并具有maxSize。这是一种黑客,但它的工作:)谢谢克里斯托弗。