第二次加载谷歌地图片段时,膨胀视图上的空指针

2024-01-03

我正在使用 DrawerLayout,当我第二次加载谷歌地图片段时,异常将按预期被捕获;但是,当我尝试时,进一步采用相同的方法

Button btnShowList = (Button) ui.findViewById(R.id.btnShowList);

我得到一个空指针异常。我想那是因为ui没有被赋予任何值。

我该如何处理这个问题?

Page2.java:

public class Page2 extends Fragment {

    View ui;
    final String TAG = "POPE";
    final int CODIGO_DE_RESULTADO_1 = 1; // Es para usarlo en onActivityResult();

    private GoogleMap mMap;

    public Page2(){
        // Este es el constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        if (ui != null) {
            ViewGroup parent = (ViewGroup) ui.getParent();
            if (parent != null){
                parent.removeView(ui);
            }
        }

        try {
            ui = inflater.inflate(R.layout.activity_page2,container,false);
        } catch (InflateException e) {
            Log.i(TAG,"HERE COMES THE STACK TRACE");
            e.printStackTrace();
        }

        FragmentManager fm = getFragmentManager();
        mMap = ((MapFragment) fm.findFragmentById(R.id.map)).getMap();
        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);     
        mMap.setMyLocationEnabled(true);


        Button btnShowList = (Button) ui.findViewById(R.id.btnShowList);
        btnShowList.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                showFileslist();
            }
        });

        return ui;

    }
}

活动页面2.xml:

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">

<fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.MapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<Button
    android:id="@+id/btnShowList"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="Load points" />

Log:

07-08 22:17:44.203: I/POPE(11859): HERE COMES THE STACK TRACE
07-08 22:17:44.213: W/System.err(11859): android.view.InflateException: Binary XML file line #6: Error inflating class fragment
07-08 22:17:44.213: W/System.err(11859):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
07-08 22:17:44.213: W/System.err(11859):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
07-08 22:17:44.213: W/System.err(11859):    at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
07-08 22:17:44.213: W/System.err(11859):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
07-08 22:17:44.213: W/System.err(11859):    at com.jorgeandresserrano.gpstools.Page2.onCreateView(Page2.java:52)
07-08 22:17:44.213: W/System.err(11859):    at android.app.Fragment.performCreateView(Fragment.java:1695)
07-08 22:17:44.213: W/System.err(11859):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
07-08 22:17:44.213: W/System.err(11859):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075)
07-08 22:17:44.213: W/System.err(11859):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
07-08 22:17:44.213: W/System.err(11859):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1455)
07-08 22:17:44.223: W/System.err(11859):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
07-08 22:17:44.223: W/System.err(11859):    at android.os.Handler.handleCallback(Handler.java:725)
07-08 22:17:44.223: W/System.err(11859):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-08 22:17:44.223: W/System.err(11859):    at android.os.Looper.loop(Looper.java:137)
07-08 22:17:44.223: W/System.err(11859):    at android.app.ActivityThread.main(ActivityThread.java:5293)
07-08 22:17:44.223: W/System.err(11859):    at java.lang.reflect.Method.invokeNative(Native Method)
07-08 22:17:44.223: W/System.err(11859):    at java.lang.reflect.Method.invoke(Method.java:511)
07-08 22:17:44.223: W/System.err(11859):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
07-08 22:17:44.223: W/System.err(11859):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
07-08 22:17:44.223: W/System.err(11859):    at dalvik.system.NativeStart.main(Native Method)
07-08 22:17:44.223: W/System.err(11859): Caused by: java.lang.IllegalArgumentException: Binary XML file line #6: Duplicate id 0x7f05003f, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment
07-08 22:17:44.223: W/System.err(11859):    at android.app.Activity.onCreateView(Activity.java:4863)
07-08 22:17:44.233: W/System.err(11859):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:686)
07-08 22:17:44.233: W/System.err(11859):    ... 19 more
07-08 22:17:44.233: D/AndroidRuntime(11859): Shutting down VM
07-08 22:17:44.233: W/dalvikvm(11859): threadid=1: thread exiting with uncaught exception (group=0x410feac8)
07-08 22:17:44.233: E/AndroidRuntime(11859): FATAL EXCEPTION: main
07-08 22:17:44.233: E/AndroidRuntime(11859): java.lang.NullPointerException
07-08 22:17:44.233: E/AndroidRuntime(11859):    at com.myname.myapp.Page2.onCreateView(Page2.java:66)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at android.app.Fragment.performCreateView(Fragment.java:1695)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1455)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at android.os.Handler.handleCallback(Handler.java:725)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at android.os.Looper.loop(Looper.java:137)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at android.app.ActivityThread.main(ActivityThread.java:5293)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at java.lang.reflect.Method.invokeNative(Native Method)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at java.lang.reflect.Method.invoke(Method.java:511)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
07-08 22:17:44.233: E/AndroidRuntime(11859):    at dalvik.system.NativeStart.main(Native Method)

第 66 行是:

Button btnShowList = (Button) ui.findViewById(R.id.btnShowList);

该问题可以通过在离开之前在 onDestroyView() 方法中删除地图片段来解决。像这样:

@Override
public void onDestroyView() {
    super.onDestroyView();
    MapFragment f = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
    if (f != null){ 
        getFragmentManager().beginTransaction().remove(f).commit();
    }
}

这篇文章更详细地解释了这一点https://stackoverflow.com/a/14484640/2422833 https://stackoverflow.com/a/14484640/2422833

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第二次加载谷歌地图片段时,膨胀视图上的空指针 的相关文章

随机推荐

  • 如何使用 REST API 从 Parse.com 下载文件?

    我发现这个问题在Parse com 文件下载问题 https stackoverflow com questions 14907562 how to download parse com file type using rest api但是
  • SPARQL 获取类或个体的所有属性

    我想要做的是从Individual1或从一个类获取属性列表 获取 某物 的所有属性 结果应该是这样的 对于 Secret Data Asset has Confidentiality Importance High Asset has Av
  • 使用 docker swarm 执行单个容器而不是“服务”

    我真的很喜欢拥有一组 docker 机器来执行 docker 服务的概念 我还喜欢单个 docker 容器所不具备的附加功能 例如 docker Secret 但我确实不需要长期服务 我的用例是简单地执行 bash 脚本 以使用 docke
  • JavaScript 静态类型检查的现状如何?

    我知道 Google Closure 编译器会进行类型检查 但是有没有其他替代方案 最好是不与库和优化器紧密耦合的替代方案 如果没有 有什么办法让Google Closure编译器only做静态分析 这里的静态分析是指定义参数的类型等 如果
  • 使用 MongoDB Java 驱动程序更新嵌入式文档中的字段?

    我正在尝试使用 Java 驱动程序对 MongoDB 中的嵌入式文档执行更新 但收到一个 IllegalArgumentException 指出 存储在数据库中的字段不能有 我的文档具有以下结构 id ObjectId 5155d102a4
  • 错误:之前应有“=”、“,”、“;”、“asm”或“__attribute__”

    是的 我知道这个问题以前已经被问过很多次了 但是我正在绞尽脑汁试图找出导致错误的原因 因为我无法识别通常丢失的分号在哪里 list h list h ifndef LIST H define LIST H define TRUE true
  • 从 Powershell 运行 R 脚本

    在批处理脚本中 我可以使用以下语法运行 R 脚本 Rterm exe quiet slave vanilla lt C some script R 不过 Powershell似乎为以后的扩展保留了 你可能应该看看Rscript而不是重定向
  • grails 将验证错误添加到 hasErrors

    我想知道如何向 hasErrors 方法添加自定义错误 以便 gsp 检测到错误 到目前为止我的代码 def recoverySetup new RecoverySetup params def onesolOrgkey OnesolOrg
  • '-[CIContext initWithOptions:]: 无法识别的选择器发送到实例

    我用它来生成一个大图像 let context CIContext options nil let bitmapImage CGImageRef context createCGImage image fromRect extent CGC
  • WordPress 插件内子页面的 url 解析

    假设我在 WordPress 中有一个页面 foo 这样 http www blah com foo 就会显示它 假设此页面的内容中有一个触发器 例如 现在有没有一种方法可以让插件知道它想要处理该类型的所有 urlhttp www blah
  • 在 Firebase 存储上复制文件?

    是否可以复制 Firebase 存储上的现有文件而无需再次上传 我需要它来设置我的应用程序的已发布 工作版本 Firebase Storage API 中没有方法可以为您已上传的文件创建副本 但 Firebase Storage 是建立在
  • 使用 Azul jdk 11 运行嵌入式 cassandra 时出现 AccessDeniedException

    我正在尝试使用 cassandra unit 库运行嵌入式 Cassandra蓝色 JDK 11使用 Gradle 项目并获取以下 AccessDenindException 我已经检查了权限build文件夹不是只读的 并且已经有一些文件
  • 选择不同的通知并准备更清晰的通知消息

    我已经创建了一个通知系统 它非常好 为了使其完美 还有一些事情需要改进 所以我就在这里 我正在开发的应用程序是一个用 PHP 编写的网站 我的通知有这个seen指示通知是否已签出的列 当用户单击与 Facebook 非常相似的通知下拉按钮时
  • 如何导入资源模块?

    今天我看到一个 python 文件以 import sys import time import heapq import resource from itertools import groupby from collections im
  • Heroku Rails Procfile

    我对 Heroku 很陌生 我将 Rails 应用程序上传到 Heroku 并希望使用 Thin 而不是 Webrick 来运行它 下列的Heroku 的指南 https devcenter heroku com articles rail
  • 带有 Flex SDK 的 Flash 组件

    我正在使用 Flex SDK 将 ActionScript 3 类编译为 swf 有些组件未包含在 SDK 中 例如 fl controls 组件 我有哪些选项可以访问闪存组件 我看到其他人提到我可以将它们导出到 Flash Pro 中的
  • Lua:加载文件后获取全局函数失败

    我正在尝试调用名为 test2 lua 的 lua 文件内的函数 这是test2 lua的内容 function abc path t table insert t a return t end 正如您所看到的 它需要一个输入并返回一个字符
  • Android:读取在 Google Drive 文件选择器中选择的文件

    在我的应用程序中 我需要读取一个设置文件 该设置文件可以位于本地存储中 也可以位于用户的 Google Drive 存储中 安装了 Google Drive 应用程序 下面打开一个文件选择器 首先询问用户要使用哪个文件选择器 包括使用 Go
  • 如何检索一个人的所有 GitHub 存储库列表?

    我们需要显示一个人在 GitHub 帐户上的存储库中的所有项目 如何使用特定人员的 git 用户名显示其所有 git 存储库的名称 您可以使用github API http developer github com v3 repos 为了这
  • 第二次加载谷歌地图片段时,膨胀视图上的空指针

    我正在使用 DrawerLayout 当我第二次加载谷歌地图片段时 异常将按预期被捕获 但是 当我尝试时 进一步采用相同的方法 Button btnShowList Button ui findViewById R id btnShowLi