1

私はかなり基本的なゲームを作っています。私の好みでは、難易度の設定を変更するオプションがあります。どういうわけか、それを呼んだメインアクティビティで、彼らが難易度を変えたかどうかを感じられるようにしたいと思います。(そしてゲームを再開します)

設定アクティビティが非同期で処理される方法が原因で問題が発生しています。(メニュー選択から)インテントを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;
4

3 に答える 3

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
    }
}
于 2011-04-27T01:28:56.417 に答える
4

OnPreferenceChangeListenerこれを使用して、設定の変更を非常に簡単にリッスンできます。

于 2011-04-27T01:26:26.507 に答える
1

これOnPreferenceChangeListenerは良い考えですが、を使用して好みのアクティビティを開始することもできますstartActivityForResult()。設定アクティビティが戻った後、アクティビティが通知されonActivityResult()ます(設定の変更を処理するには、アクティビティをオーバーライドする必要があります)。

于 2011-04-27T06:37:59.053 に答える