Android - 在用户访问PreferenceActivity后确定Preference是否已更改

时间:2011-04-27 01:22:03

标签: android asynchronous preferenceactivity

我正在做一个相当基本的游戏。在我的偏好中,可以选择更改难度设置。我希望能够以某种方式,在调用它的主要活动中,感觉他们是否已经改变了难度。 (然后重新开始游戏)

由于异步处理偏好活动的方式,我遇到了困难。如果我在将意图发送到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;

3 个答案:

答案 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()通知您的活动(您应该覆盖它以处理首选项更改)。