gpt4 book ai didi

android - MapFragment:使用后退按钮后性能不佳

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:32:41 27 4
gpt4 key购买 nike

MapFragment 与操作栏菜单一起使用时,我遇到了性能问题。

当满足三个条件时就会出现错误

  1. 实例化一个 MapFragment
  2. 从选项菜单触发 fragment 事务,用另一个 fragment 替换 map fragment 。
  3. 点击后退按钮返回到 map fragment 。现在性能明显下降。平移和缩放非常不稳定。

再次打开选项菜单并再次关闭它可以解决问题。

  • 从 View 按钮而不是选项菜单触发 fragment 替换。
  • onCreate()
  • 中触发 fragment 替换权
  • 用选项菜单中的 MapFragment 替换空白 fragment
  • 从选项菜单调用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;
}
}

Activity布局,没什么特别的

<?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" />

最佳答案

fragment 事务在选项菜单关闭之前执行,这导致了奇怪的行为。

不是直接执行 fragment 事务,而是将其发布到 Handler 上。关闭选项菜单后,将执行 fragment 事务。

试试这个:

@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;
}

关于android - MapFragment:使用后退按钮后性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25181860/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com