3

SettingsActivityを作成して、ユーザーがプリファレンスを設定できるようにします。好みの1つは肌の色です。

    Intent settingIntent = new Intent(this, SettingsActivity.class);
    startActivity(settingIntent);

ユーザーが設定を終了したら、[完了]ボタンをタップしてMainActivityに戻ります。

    Intent intent = new Intent();
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    intent.setClass(this, MainActivity.class);
    startActivity(intent);
    finish();

しかし、MainActivityは実際には変更されません。

onCreate()でのみ変更を適用することに気付きました

    setTheme(SettingsActivity.getSkinColor()); // Get the preference from SharedPreference
    setContentView(R.layout.mylayout);

この場合、アクティビティを再現する必要があると思います。そこで、 intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK )に変更します。

ただし、ユーザーが[完了]ボタンをタップすると、新しいMainActivityが作成されます。

アクティビティを再作成せずにsetThemeを適用する方法はありますか?または、少なくとも、新しいインスタンスを作成するときに、すべてのランタイムインスタンスと状態を保持しますか?

4

2 に答える 2

0

インテントにエクストラを追加して、新しく開始されたアクティビティにランタイム状態と、それ自体を適切に構成するために必要なテーマ情報を提供します。

于 2013-02-20T20:27:52.157 に答える
0

アクティビティを強制的に再作成する必要はありません。

メイン アクティビティで、onResume()テーマが変更されたかどうかを確認できます。setTheme()その場合は、もう一度呼び出しsetContentView()て、新しいテーマでレイアウトを再作成します。すべてのオブジェクトが再作成されているfindViewById()ため、すべての呼び出しをやり直すことを忘れないでください。View

于 2013-02-20T22:25:26.007 に答える