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

2023-12-14

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

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

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

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

当以下情况时,该行为不会出现

  • 从视图按钮而不是选项菜单触发片段替换。
  • 立即触发片段替换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(使用前将#替换为@)

MapFragment:使用后退按钮后性能不佳 的相关文章

随机推荐

  • 带有 Tomcat 9 的 jakarta.servlet - 未找到问题 [重复]

    这个问题在这里已经有答案了 我有一个使用 eclipse 和 tomcat 9 服务器运行的应用程序 当我运行应用程序时 它会在浏览器中打开 index html 页面 但在索引页面内调用的 API 会出现 404 状态错误 我尝试了各种
  • 通过鼠标点击删除节点,networkX,python 2.7

    我用Python 2 7用networkX编写了一个程序 它绘制了一棵带有黑白节点的树 这是一个最小的例子 import networkx as nx import matplotlib pyplot as plt import numpy
  • 如何立即调用 C++ lambda?

    我继承的类的构造函数需要传入一个重要的对象 与此类似 MyFoo MyFoo SomeBase complexstuff return The complexstuff没有什么关系MyFoo 所以我不想将其传递进去 而不是编写某种返回的一次
  • 更改 HTML 文本框:覆盖而不是插入为用户类型

    我正在开发一项允许编辑文本的服务 为了在此过程中帮助用户 我想允许用户将文本字段设置为覆盖模式 就像在 Word 等中一样 如何将 HTML 文本框的行为更改为覆盖而不是插入文本当用户输入时 例如 如果文本框包含以下文本 This is a
  • 有什么方法可以根据类模板类型初始化此变量吗?

    我有课stats带有模板 这样就可以灵活使用 不过 我对模板很陌生 我认为它们的重点是使其在用户周围灵活 所以我觉得我做错了什么 因为我撞到了一堵小墙 include
  • SQL,关于连接的问题

    我在 sql 2012 中有两个表 名称和产品 其结构 name id int increment name1 nvarchar 50 prod id int increment products nvarchar 50 id name i
  • 如何在 Indy 10 中启用完美前向保密?

    我在 Delphi 2010 中使用 OpenSSL 1 0 2o 和 Indy 10 6 2 这是我到目前为止所做的 procedure TServerForm FormCreate Sender TObject var LEcdh PE
  • 对 WCF 行为扩展进行单元测试

    这真让我抓狂 我有一个扩展 如果出现错误 我们可以用它来更改请求的内容响应 基本上 如果一切正常 它会正常序列化为 JSON 但如果我们收到未处理的异常 我们会根据不同的对象进行序列化 我们需要围绕此进行单元测试 但我不知道如何编写它们 验
  • UITableView 自定义单元格图像在滚动后消失。

    我正在创建我的开放网格视图 我创建了一个自定义单元格 如下所示 我像这样处理填充它 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexP
  • android LoginButton.setFragment 中的 facebook 登录

    我的 LogginButton 有问题 LoginButton authButton LoginButton v findViewById R id authButton authButton setFragment this 我使用的片段
  • 从 $request_body 记录 POST 数据

    我的配置设置可以处理一堆 GET 请求 这些请求呈现的像素可以很好地处理分析和解析查询字符串以进行日志记录 使用额外的第三方数据流 我需要处理对给定 URL 的 POST 请求 该 URL 在其请求正文中具有预期可记录格式的 JSON 我不
  • 如何在 JavaScript 中从多维数组中删除空数组?

    我在从 Google Sheets 中的搜索应用程序的多维数组中删除空数组 对象时遇到问题 我在用getLastRow所以我以为我会避免这个问题 但不幸的是事实并非如此 我的数组如下所示 1 39080000912E11 RSSMA0040
  • 通过 std::bind 传递右值

    我想传递一个右值std bind到 C 0x 中采用右值引用的函数 我不知道该怎么做 例如 include
  • Java、传值、引用变量

    我在理解以下示例中 Java 的 按值传递 操作时遇到问题 public class Numbers static int s ccc 7 static int t ccc 7 public static void calculate in
  • Intel 在哪里记录了 ModR/M 字节中扩展寄存器 (R8-R15) 的编码?

    我用的是官方最新的 英特尔 64 和 IA 32 架构软件开发人员手册合并卷 1 2A 2B 2C 2D 3A 3B 3C 3D 和 4 作为了解x86 64 ISA的机器级编码的参考 第 2 卷第 2 1 3 节中提供的 ModR M 和
  • 从修订历史记录中删除特定文件

    我试图从修订历史记录中删除我无意提交的特定文件 有人可以提供一种方法来做到这一点吗 你需要使用svndumpfilter工具 该过程涉及转储您的存储库 过滤 使用svndumpfilter 你的转储文件 并将结果重新加载到新的存储库中 看本
  • 在哪里可以阅读访客信息

    UPDATE 这个问题暴露了过时的 最糟糕的方法visitors count每个人都应该避免这种情况 使用复杂的计数器 由于我没有找到令人满意的 足够简单 的解决方案 因此我想出了自己的解决方案 创建一个名为的空文件ip txt并在代码中的
  • 用python中的列表替换元素

    在Python中 用另一个列表中的元素替换列表中的元素的最佳方法是什么 例如 我有 a 1 replace this 4 我想更换replace this with 2 3 更换后必须是 a 1 2 3 4 Update 当然 可以用切片来
  • 如何复制 Azure 容器和 Blob

    我正在尝试将所有 blob 复制到不同的存储中 CloudBlobClient srcblobClient sourceStorageAccount CreateCloudBlobClient CloudBlobClient targetB
  • MapFragment:使用后退按钮后性能不佳

    我在使用时遇到性能问题MapFragment与操作栏菜单一起 当满足三个条件时就会出现该错误 Have a MapFragment实例化 从选项菜单触发片段事务 用另一个片段替换地图片段 点击后退按钮并返回到地图片段 现在性能明显下降 平移