android - checkboxpreference android中的多重依赖

标签 android dependencies checkboxpreference

我的首选项屏幕中有三个复选框。我想让用户一次只选择一个复选框。 我如何实现这一目标?

提前致谢。

最佳答案

您需要创建一个 onpreferenceChangelistener:

prefChangeListener = new Preference.OnPreferenceChangeListener() {

                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    if (preference == pref1 && newValue.toString().equals("true")){
                        pref2.setChecked(false);
                        pref3.setChecked(false);
                    }
                    if (preference == pref2 && newValue.toString().equals("true")){
                        pref1.setChecked(false);
                        pref3.setChecked(false);
                    }
                    if (preference == pref3 && newValue.toString().equals("true")){
                        pref1.setChecked(false);
                        pref2.setChecked(false);
                    }
                    return true;    
                }
        };

然后使用它,

pref1.setOnPreferenceChangeListener(prefChangeListener);
pref2.setOnPreferenceChangeListener(prefChangeListener);
pref3.setOnPreferenceChangeListener(prefChangeListener);

或者,您可以使用 ListPreference,它会弹出一个单选组,您可以将三个选项放在那里。这就是我在我的应用程序中所做的,但如果需要复选框首选项,那当然可以。

这是我的列表首选项(用于选择响铃多长时间):

<ListPreference android:persistent="true"
            android:title="Ring Time"
            android:summary="Choose how long the phone will ring when activated"
            android:key="ringTime"
            android:defaultValue="ringNot"
            android:entries="@array/ringTime"
            android:entryValues="@array/ringSetting" />

这是我的@array/ringTime 和@array/ringSetting 的 XML

 <?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="ringTime">
   <item>Don\'t Ring</item>
   <item>Ring 30 Seconds</item>
   <item>Ring 2 Minutes</item>   
   <item>Ring 5 Minutes</item>
</string-array>
<string-array name="ringSetting">
   <item>ringNot</item>
   <item>ring30Sec</item>
   <item>ring2Min</item>   
   <item>ring5Min</item>
</string-array>

</resources>

我知道这是一个 5 个月前的问题,但我认为这可能会对其他人有所帮助。 :)

然后在我的代码中实现 listpreference:

ringTime = pref.getString("ringTime", "ringNot");//ListPreferences are stored as strings
if (ringTime.equals(ring30Sec))
//ring for 30 seconds
else if (ringTime.equals(ring2Min))
//ring for 2 minutes
else if (ringTime.equals(ring5Min))
//ring for 5 minutes
else Toast.makeText(getBaseContext(), "Not Ringing", Toast.LENGTH_LONG).show(); 

关于android - checkboxpreference android中的多重依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5063100/

相关文章:

android异步任务尝试

Android 3.2 - 在 DialogFragment 中自定义 AlertDialog 按钮

java - cocos2d-x/firebase/admob加载插页式广告失败

java - Java中如何处理冲突的依赖关系

java - 作为 Maven 构建过程的一部分,将 Jar 依赖项安装到本地存储库

Expresso 的 Android 测试首选项 fragment

android - 更新后我无法在 android studio 中拖放任何元素

python - 在同一进程中使用不同版本的 python 库

android - 声明 CheckBoxPreference 时无法成功转换