Android - определите, изменилось ли предпочтение после того, как пользователь получил доступ к PreferenceActivity. - PullRequest
1 голос
/ 27 апреля 2011

Я делаю довольно простую игру.В моих предпочтениях есть возможность изменить настройку сложности.Я хотел бы как-нибудь, в основной деятельности, которая его назвала, почувствовать, изменили ли они сложность.(А затем перезапустите игру)

У меня возникли трудности из-за того, что действие с предпочтениями обрабатывается асинхронно.Если я добавлю логику для проверки значения до и после отправки намерения в мой 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 ]

6 голосов
/ 27 апреля 2011

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
    }
}
4 голосов
/ 27 апреля 2011

OnPreferenceChangeListener Вы можете использовать его, чтобы очень легко прослушивать изменения предпочтений.

1 голос
/ 27 апреля 2011

Хорошая идея - OnPreferenceChangeListener, но вы также можете начать свои предпочтительные действия, используя startActivityForResult().Затем ваша активность уведомляется в onActivityResult() после того, как действие предпочтений возвращается (вы должны переопределить его для обработки изменений предпочтений).

...