2016-07-26 11 views
0

ロケールの変更に対してのみアクションを実行するサンプルアプリケーションを作成しようとしています。私はonConfigurationChanged(...)を実装し、ユーザーをロケールの変更時にのみ別のアクティビティにリダイレクトしたいと思います。ロケールの変更をリッスンするアクティビティもオリエンテーションの変更を聞きます(これはマニフェストで行っています)。Android - 設定変更を区別する

私の質問は、2つの構成変更を区別する方法はありますか?

活動がそうのようなマニフェストで宣言されている:

<activity android:name=".views.MainActivity" 
       android:configChanges="layoutDirection|locale|orientation|screenSize"/> 

とonConfigurationChange(..)メソッドはそうのようなものです:

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     // should execute only on locale change 
     Intent intent = new Intent(this, SecondActivity.class); 
     startActivity(intent); 
    } 

答えて

2

あなたのSharedPreferencesでロケールを保存して比較することができロケールが変更された場合は、onConfigurationChangedメソッドで

はこのようにそれを使用します。

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    SharedPreferences prefs = getSharedPreferences(
    "yourapp", Context.MODE_PRIVATE); 
    prefs.getString("locale", "DEFAULT"); 

    //newConfig.locale is deprecated since API lvl 24, you can also use newConfig.getLocales().get(0) 
    if(!locale.equalsIgnoreCase(newConfig.locale.toLanguageTag()) { 
     // should execute only on locale change 
     SharedPreferences settings = getSharedPreferences("yourapp", MODE_PRIVATE); 
     SharedPreferences.Editor prefEditor = settings.edit(); 
     prefEditor.putString("locale", newConfig.locale.toLanguageTag()); 
     prefEditor.commit(); 
     Intent intent = new Intent(this, SecondActivity.class); 
     startActivity(intent); 
    } 
} 
+0

ニース、あなたは(任意のロケールの変更が発生する前に活動負荷1回目)のonCreateの前のロケールへの参照を格納することによってSharedPreferencesを使用しないようして、両者を比較することができロケール。 – user1841702

+0

もちろん、これによってさらに簡単になります。それを考えなかったけど、私が助けることができてうれしいです:) – babadaba

関連する問題