【发布时间】:2012-05-10 18:35:37
【问题描述】:
我正在尝试从Professional Android Programming with Mono for Android and .Net/C# 书中获取一个示例 (第 202 至 204 页)工作。
要注册和注销更改侦听器,它会显示以下代码示例:
using System;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Preferences;
namespace MonoForAndroidPreferences
{
[Activity(Label = "User Preferences")]
public class UserPreferences : PreferenceActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Create your application here
this.AddPreferencesFromResource(Resource.Layout.userpreferences);
}
protected override void OnResume()
{
base.OnResume();
this.GetPreferences(FileCreationMode.Private).RegisterOnSharedPreferenceChangeListener(this);
}
protected override void OnPause()
{
base.OnPause();
this.GetPreferences(FileCreationMode.Private).UnregisterOnSharedPreferenceChangeListener(this);
}
public void OnSharedPreferenceChanged(ISharedPreferences prefs, string key)
{
// Do something with the changed value pointed to by key
}
}
}
RegisterOnSharedPreferenceChangeListener 和UnregisterOnSharedPreferenceChangeListener 当然不能从UserPreferences 转换为ISharedPreferencesOnSharedPreferenceChangeListener。
我不确定作者是如何让它起作用的。任何帮助将不胜感激。
我也尝试从wrox.com 下载示例代码,但它不包括示例代码中的监听偏好更改。
编辑:
以下代码可以编译,但在首选项中进行更新时,OnSharedPreferenceChanged 永远不会被调用。
public class UserPreferences : PreferenceActivity, ISharedPreferencesOnSharedPreferenceChangeListener
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Create your application here
this.AddPreferencesFromResource(Resource.Layout.userpreferences);
}
protected override void OnResume()
{
base.OnResume();
this.GetPreferences(FileCreationMode.Private).RegisterOnSharedPreferenceChangeListener(this);
}
protected override void OnPause()
{
base.OnPause();
this.GetPreferences(FileCreationMode.Private).UnregisterOnSharedPreferenceChangeListener(this);
}
void ISharedPreferencesOnSharedPreferenceChangeListener.OnSharedPreferenceChanged(ISharedPreferences prefs, string key)
{
// Do something with the changed value pointed to by key
}
}
【问题讨论】: