2017-04-11 15 views
0

私は1 base activityといくつかの断片を持つAndroidアプリを持っています。 DrawerLayout内のNavigationViewを使用して変更できます。ユーザーはフラグメントの1つでアプリケーションの言語を変更できます。アプリケーションを再起動すると、その特定のフラグメントに戻ることができます。ユーザーが言語を変更する場合Android版の変更ナビゲーションビューの断片

=====DrawerLayout===== 
1. Fragment Home -> This is the starting fragment 
2. Fragment One 
3. Fragment Settings -> Users change the language here. 

は、base activityのメソッドが呼び出されて、私はロケール変更し、)(再作成を呼び出します。これにより、フラグメントホームが新しい言語で表示された状態でアプリケーションが更新されます。私はプログラムでフラグメント設定に変更したいと思います。

navigationView.<METHOD?> 
+0

あなたは活動のコールバックから直接に活性な断片を設定していないのはなぜ? –

+0

私はアプリの言語を変更する必要があるので。私はrecreate()を呼び出さない限り更新されません。 –

答えて

1

問題を解決するために、特別な状態を保存してアクティビティを再作成することができます。アクティビティが再作成されると、保存された状態を使用して設定ページに移動する必要があることがわかります。

は、あなたの活動でこれを試してみてください:

static final String SHOW_SETTINGS = "SHOW_SETTINGS"; 
private boolean showSettings = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    createLayoutAndDoOtherOnCreateThings(); 

    // Check whether we're recreating a previously destroyed instance 
    if (savedInstanceState != null) { 
     // Restore value of members from saved state 
     if (savedInstanceState.getBoolean(SHOW_SETTINGS, false)) { 
      showSettingsFragment(); 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putBoolean(SHOW_SETTINGS, showSettings); 
    // Always call the superclass so it can save the view hierarchy state 
    super.onSaveInstanceState(savedInstanceState); 
} 

private void callRecreateWithSettingsWhenRecreating() { 
    showSettings = true; 
    recreate(); 
} 
関連する問題