我正在做一个相当基本的游戏。在我的偏好中,可以选择更改难度设置。我希望能够以某种方式,在调用它的主要活动中,感觉他们是否已经改变了难度。 (然后重新开始游戏)
由于异步处理偏好活动的方式,我遇到了困难。如果我在将意图发送到PreferenceActivity之前和之后添加逻辑来检查值(从菜单选择中),它确实不起作用......
有人可以指出我正确的方向,如何序列化通常异步处理的一大块代码,或者知道如何感知偏好的变化?是否隐藏了一个监听器类?
为了后人的缘故,这里是处理意图的代码以及我如何失败。 (摘要,从内部菜单onOptionsItemSelected,在交换机内)
case R.id.menuOptions:
String currentDifficulty = preferences.getString("difficulty","problem!");
Intent i = new Intent(this, prefs.class);
startActivity(i);
if (currentDifficulty.equals(preferences.getString("difficulty","problem!")))
return true;
else doNewGame();
return true;
答案 0 :(得分:6)
Android允许您注册偏好更改的侦听器。这是一个简单的例子:
public class myClass implements OnSharedPreferenceChangeListener
{
private SharedPreferences settings;
settings = PreferenceManager.getDefaultSharedPreferences(this);
settings.registerOnSharedPreferenceChangeListener(this);
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
// Process it here
}
}
答案 1 :(得分:4)
OnPreferenceChangeListener您可以使用它轻松收听偏好更改。
答案 2 :(得分:1)
OnPreferenceChangeListener
是一个好主意,但您也可以使用startActivityForResult()
开始您的偏好活动。然后,您会在首选项活动返回后通过onActivityResult()
通知您的活动(您应该覆盖它以处理首选项更改)。