2016-03-22 3 views
0

Ich habe ein Fragment, das einen Viewpager voller benutzerdefinierten Ansichten hat.Benutzerdefinierte Ansicht onDraw() wird nicht erneut nach activity.recreate() aufgerufen

Bei der Rückkehr von den Aktivitäten meiner Einstellungen erhält MainActivity das Aktivitätsergebnis und ruft (wenn die Sprache geändert wurde) recreate() auf.

Beim Debuggen sehe ich die benutzerdefinierten Ansichten überAttachedToWindow() und OnDetachedToWindow() und schließlich auf OnAttachedToWindow() enden, aber nie wieder auf Draw (Canvas c) aufrufen, auch wenn ich invalidate() auf der Ansicht aufrufen Pager oder die benutzerdefinierte Ansicht selbst, sodass die benutzerdefinierten Ansichten nicht auf der Seite angezeigt werden.

Ich habe auch versucht, setRetainInstance aufzurufen (true); in der onCreateView für das Fragment.

Was sollte ich noch versuchen?

Antwort

1

hatte ich das gleiche Problem wie Sie mit einer Aktivität, die einzige Möglichkeit, die ich gefunden wurde zerstört und die Aktivität zu schaffen wieder:

public void setLanguage(Context context, String languageToLoad) { 

    Resources res = context.getResources(); 
    // Change locale settings in the app. 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    android.content.res.Configuration conf = res.getConfiguration(); 
    conf.locale = new Locale(languageToLoad.toLowerCase()); 
    res.updateConfiguration(conf, dm); 
    Intent intent = new Intent(getApplicationContext(), MainMenuActivity.class); 
    startActivity(intent); 
    finish(); 

} 

Ich weiß, es ist nicht der beste Weg, aber ich hoffe, dass es Ihnen helfen.

Ich habe dies gefunden:

if (Build.VERSION.SDK_INT >= 11) { 
    recreate(); 
} else { 
    Intent intent = getIntent(); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
    finish(); 
    overridePendingTransition(0, 0); 

    startActivity(intent); 
    overridePendingTransition(0, 0); 
} 

hier How do I restart an Android Activity

auch Denken Sie daran, Ihre Fragment aus dem FragmentManager zu entfernen:

Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT); 
if(fragment != null) 
    getSupportFragmentManager().beginTransaction().remove(fragment).commit(); 
+0

Sollte nicht neu() automatisch tun dies werden, obwohl? – beyondtheteal

+0

Absicht i = getIntent(); Ende(); startAktivität (i); Dies führte dazu, dass die Aktivität zum Anfang zurückging, was ich wollte. Vielen Dank! – beyondtheteal