我在使用时遇到性能问题MapFragment
与操作栏菜单一起。
当满足三个条件时就会出现该错误
- Have a
MapFragment
实例化。
- 从选项菜单触发片段事务,用另一个片段替换地图片段。
- 点击后退按钮并返回到地图片段。现在性能明显下降。平移和缩放非常不稳定。
再次打开选项菜单并再次关闭它可以解决该问题。
当以下情况时,该行为不会出现
- 从视图按钮而不是选项菜单触发片段替换。
- 立即触发片段替换
onCreate()
- 从选项菜单中用 MapFragment 替换空白片段
- calling
popBackStack
从选项菜单
- 使用 ListFragment 代替 MapView
最小工作示例(需要访问 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;
}
}
活动布局,没什么特别的
<?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" />
片段事务在选项菜单关闭之前执行,这会导致奇怪的行为。
不是直接执行片段交易,而是将其发布到Handler
。一旦选项菜单关闭,片段交易就会被执行。
尝试这个 :
@Override
public boolean onOptionsItemSelected(MenuItem item) {
final Fragment fragment;
if (item.getTitle().equals(MAP)) {
fragment = mMapFragment;
} else {
fragment = new Fragment();
}
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
getFragmentManager()
.beginTransaction()
.replace(R.id.main, fragment)
.addToBackStack(null)
.commit();
}
});
return true;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)