#android #asynchronous #preferenceactivity
#Android #асинхронный #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;
Ответ №1:
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. Спасибо. Этот пример мне очень помог, я использовал его в качестве анонимного слушателя и подключил его для работы в соответствии с моими потребностями.
Ответ №2:
OnPreferenceChangeListener Вы можете использовать его, чтобы очень легко прослушивать изменения предпочтений.
Ответ №3:
OnPreferenceChangeListener
Это хорошая идея, но вы также могли бы начать свое действие с предпочтениями с помощью startActivityForResult()
. Затем ваше действие уведомляется в onActivityResult()
после возврата действия предпочтения (вы должны переопределить его, чтобы обработать изменения предпочтений).
Комментарии:
1. Это сработало бы, но вам пришлось бы подождать, пока действие предпочтения не будет завершено, прежде чем получить результат, в то время как OnPreferenceChangeListener немедленно уведомляет вас.
2. Этот подход имеет некоторые преимущества, особенно когда вы хотите выполнить некоторые действия с измененными предпочтениями ровно один раз. Например, когда вы настроили подключение к серверу, было бы очень досадно, если бы приложение всегда пыталось подключиться, когда вы устанавливаете свойства для хоста, порта, имени пользователя или пароля, но все это должно быть установлено, прежде чем это заработает.