Ich habe eine einfache Aktivität, in der es eine Navigationsschublade gehostet wird. Einer seiner Einträge ist ein WebView, der sehr viel zu Lasten bringt (es zeigt Gmail an, so dass das Folgen all dieser fiesen Weiterleitungen ziemlich viel kostet).Wie kann die Wiederherstellung von Fragmenten verhindert werden, wenn diese aus NavigationDrawer ausgewählt wird?
Ich möchte das Fragment beibehalten, auch wenn verschiedene Auswahlen auftreten. Ich dachte, dass diese Lösungen funktionieren könnten. Sie haben nicht.
1) nicht das Fragment neu erstellen: selbst wenn mWebmailFragment tatsächlichist nicht null, onCreateView() in jedem Fall aufgerufen wird.
private Fragment mWebmailFragment /*, the others */;
public void selectItem(int position) {
Fragment fragment = null;
switch (position) {
case FRAGMENT_CODE_WEBMAIL:
mWebmailFragment = mWebmailFragment!=null ? mWebmailFragment : new WebmailFragment();
fragment = mWebmailFragment;
break;
// ...
}
2) Wenn onCreateView() aufgerufen wird, funktioniert der Erhalt des WebView-Objektstatus möglicherweise. Nun, es tut nicht: Debuggen Ich entdeckte, dass SavedInstanceState immer null ist. Ich weiß nicht warum.
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
// Retain instance
setRetainInstance(true);
//....
// SavedState
if (savedInstanceState != null) {
mWebView.restoreState(savedInstanceState);
} else {
// do stuff
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mWebView.saveState(outState);
}
Wie ändern Sie Fragmente, wenn Sie ein anderes auswählen? Wenn Sie sie "ersetzen", versuchen Sie vielleicht stattdessen "show()" und "hide()". – Maximosaic
Haben Sie jemals eine Lösung gefunden? –
Nein ... Ich habe die Logik "Alle ausblenden - Show selected" verwendet, aber wenn eine Orientierungsänderung auftritt, wird alles durcheinander gebracht. Zur Zeit löste ich das Erzwingen der Benutzeroberfläche im Hochformat, aber Sie können verstehen, wie groß eine Grenze ist. – Gianluca