2017-04-11 5 views
0

Ich habe eine Android App mit 1 base activity und ein paar Fragmente. Sie können mit der NavigationView innerhalb der DrawerLayout geändert werden. Benutzer können die Sprache der Anwendung in einem der Fragmente ändern, und wenn ich die Anwendung neu starte, möchte ich, dass Benutzer zu diesem bestimmten Fragment zurückkehren.Android Änderung Fragment der Navigationsansicht

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

Wenn Benutzer die Sprache, ein Verfahren, in dem base activity ändern aufgerufen wird, und ich ändern die Locale und neu() aufrufen. Dadurch wird die App aktualisiert, wobei das Fragment Home in der neuen Sprache angezeigt wird. Ich möchte programmatisch zu Fragmenteinstellungen wechseln.

+0

Warum sind Sie nicht das aktive Fragment Einstellung direkt von der Rückrufaktivität? –

+0

Weil ich die Sprache der App ändern muss. Es wird nicht aktualisiert, wenn ich recreate() aufruft. –

Antwort

1

Um Ihr Problem zu lösen, können Sie den Sonderstatus speichern und die Aktivität neu erstellen. Wenn die Aktivität neu erstellt wird, weiß sie, dass sie mithilfe des gespeicherten Status zur Einstellungsseite wechseln muss.

Versuchen Sie dies in Ihrer Aktivität:

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(); 
} 
Verwandte Themen