Android偏好。禁用父级时设置子默认值

时间:2017-06-06 19:53:43

标签: c# android xamarin preferences

我正在开发简单的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_trackSwitchPreference,它将确定我的应用会跟踪电池(等级等)。如果该偏好设置为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 
}`

但是这个解决方案并不好,因为每次使用儿童偏好之前我都必须检查父母。

1 个答案:

答案 0 :(得分:1)

您可以订阅PreferenceChange的{​​{1}}事件,例如:

SwitchPreference

然后在var switchp = PreferenceScreen.FindPreference("Pref_battery_track"); switchp.PreferenceChange += Switchp_PreferenceChange; 中设置Switchp_PreferenceChange的{​​{1}}属性,例如:

Checked