我正在开发简单的Android应用程序。我正在使用C#和Xamarin,但我认为编程语言在这种情况下并不重要,因为所有更改都在.xml
文件中。
好的,所以我的问题与依赖于其他偏好的偏好有关。首先让我展示我的代码,然后我将尝试解释我的问题。
<PreferenceCategory
android:title="@string/Pref_battery_settings"
android:key="pref_key_battery_settings">
<SwitchPreference
android:title="@string/Pref_battery_track_title"
android:summary="@string/Pref_battery_track_summary"
android:key="Pref_battery_track"
android:defaultValue="true"/>
<CheckBoxPreference
android:dependency="Pref_battery_track"
android:disableDependentsState="true"
android:title="@string/Pref_battery_track_battery_status_title"
android:summary="@string/Pref_battery_track_battery_status_summary"
android:key="Pref_battery_track_status"
android:defaultValue="false"/>
你可以看到我有2个偏好。首先Pref_battery_track
是SwitchPreference
,它将确定我的应用会跟踪电池(等级等)。如果该偏好设置为TRUE
,则用户将能够使用第二优先级,这将决定是否我们想要跟踪电池状态或不是(状态是例如充电,放电等)。在逻辑思维中,如果我们将首选项设置为true,我们可以决定是否要跟踪更多信息,但现在我有问题。当我将Pref_battery_track
设置为true
,然后将Pref_battery_track_status
设置为true
并将第一个首选项切换回false
秒仍将为true
,我们将能够执行如下代码:
var prefs = PreferenceManager.GetDefaultSharedPreferences(this);
var t = prefs.GetBoolean("Pref_battery_track_status", false);
如果Pref_battery_track_status
成立,即使Pref_battery_track
属实,此代码也会返回true。所以我的问题是:当父偏好为false
时,有没有办法将子偏好设置为默认值?
希望你知道我在问什么。
是的,我知道我可以在使用儿童偏好之前简单检查,如`
var prefs = PreferenceManager.GetDefaultSharedPreferences(this);
if(prefs.GetBoolean("Pref_battery_track", false))
{
var t = prefs.GetBoolean("Pref_battery_track_status", false);
// Do things
}`
但是这个解决方案并不好,因为每次使用儿童偏好之前我都必须检查父母。
答案 0 :(得分:1)
您可以订阅PreferenceChange
的{{1}}事件,例如:
SwitchPreference
然后在var switchp = PreferenceScreen.FindPreference("Pref_battery_track");
switchp.PreferenceChange += Switchp_PreferenceChange;
中设置Switchp_PreferenceChange
的{{1}}属性,例如:
Checked