7

メインのアクティビティ (A と呼びましょう) と、アプリの言語を変更するために使用される 2 つ目のアクティビティ (B と呼びましょう) があります。ポイントは、ボタンをクリックして言語を変更すると、私も呼び出しrecreate();、B が言語を変更することです。ここまでは大丈夫です。問題は、メイン アクティビティ (A) に戻ったときに発生し、言語が再作成されていないため言語が更新されていないため、A を更新するために B から A を再作成する方法はありますか?

このコードを使用してアプリを翻訳します (英語版の例):

public void btnIngles_onClick(View v)
{
    Locale locale = new Locale("en");
    Locale.setDefault(locale);

    Configuration config = new Configuration();
    config.locale = locale;
    this.getApplicationContext().getResources().updateConfiguration(config, null);
    recreate();
}
4

3 に答える 3

7

1)たとえばActivity B、いくつかのグローバル設定を変更します。SharedPreferences

2)Activity A行うこと:

@Override
protected void onResume() {
    super.onResume();
    if(didLanguageChange)
      recreate();
}

問題が解決しました。フォアグラウンドになったActivity A ときonResume()に一時停止状態に切り替わったため、呼び出します。Activity B

于 2015-03-17T18:06:43.170 に答える
4

onActivityResult()アクティビティに実装する必要があります。このリンクにはより多くの情報があり、非常に役立つはずです。手短に:

アクティビティ A 内で、次のようなリクエスト コードとして使用される変数を作成する必要があります。

private static final int ACTIVITY_B_REQUEST = 0;

次に、ボタンの onClick リスナーで、インテントとstartActivityForResult()関数を使用してアクティビティを開始します。

Intent myIntent = new Intent(ActivityA.this, ActivityB.class);
startActivityForResult(myIntent, ACTIVITY_B_REQUEST);

これにより、アクティビティ B が開始されます。アクティビティ B が終了onActivityResultするたびに呼び出されます。それをオーバーライドして、必要な方法で実装できますが、次のようになります。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == ACTIVITY_B_REQUEST && resultCode == RESULT_OKAY){
        // Handle this by doing what you need to refresh activity A.
    } else{
        super(requestCode, resultCode, data);
    }   
}
于 2015-03-17T18:08:29.760 に答える
1

アプリを再起動します。

startActivity(new Intent(this, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent
                .FLAG_ACTIVITY_CLEAR_TOP));
于 2015-03-17T18:07:38.687 に答える