MapFragment: schlechte Leistung nach Verwendung der Zurück-Schaltfläche
Ich habe ein Leistungsproblem bei der VerwendungMapFragment
zusammen mit dem Aktionsleistenmenü.
Der Fehler tritt auf, wenn drei Bedingungen erfüllt sind
Haben eineMapFragment
instanziiert.Lösen Sie eine Fragmenttransaktion über das Optionsmenü aus und ersetzen Sie das Kartenfragment durch ein anderes Fragment.Drücken Sie die Zurück-Taste und kehren Sie zum Kartenfragment zurück. Die Leistung ist jetzt spürbar beeinträchtigt. Schwenken und Zoomen ist sehr ruckelig.Das erneute Öffnen und Schließen des Optionsmenüs behebt das Problem.
Das Verhalten tritt nicht auf, wenn
Auslösen des Fragmentaustauschs über eine Ansichtsschaltfläche statt über das Optionsmenü.Auslösen des Fragmentersatzes direkt inonCreate()
Ersetzen Sie das leere Fragment durch MapFragment aus dem OptionsmenüBerufungpopBackStack
aus dem OptionsmenüVerwenden eines ListFragment anstelle einer MapViewMinimales Arbeitsbeispiel (erfordert Zugriff auf Google Maps API):
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import com.google.android.gms.maps.MapFragment;
public class MapFragmentBugActivity extends Activity {
Fragment mMapFragment;
String MAP = "Map";
String BLANK = "Blank";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_bug);
mMapFragment = new MapFragment();
getFragmentManager().beginTransaction()
.replace(R.id.main, mMapFragment)
.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(MAP);
menu.add(BLANK);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Fragment fragment;
if (item.getTitle().equals(MAP)) {
fragment = mMapFragment;
} else {
fragment = new Fragment();
}
getFragmentManager()
.beginTransaction()
.replace(R.id.main, fragment)
.addToBackStack(null)
.commit();
return true;
}
}
Aktivitätslayout, nichts Besonderes
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />