Android中的FragmentManager的问题
Fragment是构成灵活UI的重要部分。最近学习到Fragment的使用时候,碰到一个问题。主程序程序布局非常简单:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SlidingPaneLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/slidingPanelLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"> <fragment
android:id="@+id/bookmarkFragment"
android:name="com.hnb.zzk.slidingpanellayouttest.BookMarkerFragment"
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_gravity="left"/> <fragment
android:id="@+id/browserFragment"
android:name="com.hnb.zzk.slidingpanellayouttest.BrowserFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right"
android:layout_weight="1"/> </android.support.v4.widget.SlidingPaneLayout>
就是两个Fragment构成主要布局,然后在Java代码中获取Fragment:
SlidingPaneLayout spl = (SlidingPaneLayout) this.findViewById(R.id.slidingPanelLayout);
spl.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
@Override
public void onPanelSlide(View panel, float slideOffset) { } @Override
public void onPanelOpened(View panel) {
MainActivity.this.getFragmentManager().findFragmentById(R.id.bookmarkFragment).setHasOptionsMenu(true);
} @Override
public void onPanelClosed(View panel) {
MainActivity.this.getFragmentManager().findFragmentById(R.id.bookmarkFragment).setHasOptionsMenu(false);
}
});
初步看起来似乎一切顺利,代码也是精简的一塌糊涂。于是乎运行起来看看,在模拟器中却直接奔溃,赶紧加上异常捕捉代码,得到如下结果:
java.lang.NullPointerException
at com.hnb.zzk.slidingpanellayouttest.MainActivity$2.onPanelOpened(MainActivity.java:44)
at android.support.v4.widget.SlidingPaneLayout.dispatchOnPanelOpened(SlidingPaneLayout.java:343)
at android.support.v4.widget.SlidingPaneLayout$DragHelperCallback.onViewDragStateChanged(SlidingPaneLayout.java:1318)
at android.support.v4.widget.ViewDragHelper.setDragState(ViewDragHelper.java:874)
at android.support.v4.widget.ViewDragHelper.forceSettleCapturedViewAt(ViewDragHelper.java:592)
at android.support.v4.widget.ViewDragHelper.settleCapturedViewAt(ViewDragHelper.java:569)
at android.support.v4.widget.SlidingPaneLayout$DragHelperCallback.onViewReleased(SlidingPaneLayout.java:1354)
at android.support.v4.widget.ViewDragHelper.dispatchViewReleased(ViewDragHelper.java:767)
at android.support.v4.widget.ViewDragHelper.releaseViewForPointerUp(ViewDragHelper.java:1395)
at android.support.v4.widget.ViewDragHelper.processTouchEvent(ViewDragHelper.java:1213)
at android.support.v4.widget.SlidingPaneLayout.onTouchEvent(SlidingPaneLayout.java:826)
在onPanelOpend()方法里面出现了空指针异常。可能出现空指针异常的就是getFragmentManager()和findFragmentById()两个调用。findFragmentById()应该不太可能出现空指针异常,布局文件中两个fragment明摆着。那么只能说是getFragmentManager()这个调用出现了指针。在Fragment的开发文档中明确指出,Fragment的管理都是通过FragmentManager来实现的,那么问题出现在哪呢?在网上搜了一番终于发现了症结所在。我们引用的是v4兼容包中的Fragment组件,而getFragmentManager()是针对v11+的Fragment的,因此将getFragmentManager()替换成getSupportFragmentManager()就好了。
Android中的FragmentManager的问题的更多相关文章
- Android中Fragment和ViewPager那点事儿(仿微信APP)
在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...
- Android中Fragment与Activity之间的交互(两种实现方式)
(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...
- Android中的接口回调技术
Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...
- Android中Google地图路径导航,使用mapfragment地图上画出线路(google map api v2)详解
在这篇里我们只聊怎么在android中google map api v2地图上画出路径导航,用mapfragment而不是mapview,至于怎么去申请key,manifest.xml中加入的权限,系 ...
- Android中使用开源框架PagerSlidingTabStrip实现导航标题
此开源框架官网地址:https://github.com/astuetz/PagerSlidingTabStrip 可以理解为配合ViewPager使用的交互式页面指示器控件. 话不多说,先上效果图: ...
- android中Fragment的使用
android中的Fragment跟网页中的iframe很像,用于在界面上嵌入局部动态内容,我的描述可能不准确,只是我的理解吧 创建Fragment很简单,在Android Studio中是这么创建的 ...
- Android中ViewPager实现滑动条及与Fragment结合的实例教程
ViewPager类主要被用来实现可滑动的视图功能,这里我们就来共同学习Android中ViewPager实现滑动条及与Fragment结合的实例教程,需要的朋友可以参考下 自主实现滑动指示条先上一个 ...
- 理解android中ListFragment和Loader
一直以来不知Android中Loader怎么用,今天晚上特意花了时间来研究,算是基本上搞明白了,现在把相关的注释和代码发出来,以便笔记和给网友一个参考,错误之处还望大家给我留言,共同进步,这个例子采用 ...
- Android 中Dialog的使用
本文是参考ProAndroid的第10章Working with Dialogs的内容,在合适的地方添加了作者自己的一些见解最终成文. Android 中的对话框是一个展示在当前窗口上的小一号的窗口, ...
随机推荐
- 在ABP中通过EF直接执行原生Sql的解决方案
一般情况下,使用EF中的查询语法和方法语法可以帮助我们完成绝大部分业务,但是也有特殊的情况需要直接执行Sql语句.比如,我们的业务过于复杂繁琐,或是有些业务使用EF操作时比较复杂,但是使用Sql时会很 ...
- 程序员必须知道的几个Git代码托管平台
上一篇博客中2015继续任性——不会Git命令,照样玩转Git我们简单的介绍了在VS2013中使用Git,和GitHub客户端的使用.那么使用Git到底有什么好处呢?最为明显的是支持Git代码托管的平 ...
- shell脚本常规技巧
邮件相关 发送邮件: #!/usr/bin/python import sys; import smtplib; from email.MIMEText import MIMEText mail_ho ...
- 网络误区:不用中间变量交换2个变量的value,最高效的是异或运算.
本文记录了不使用中间变量交换2个变量的value,很多的网络留言说是直接异或运算就可以了,而且效率很高,是真的吗? 这里简单的说一下我的环境:Win7 32位,Qt creator 5.4.1 编译器 ...
- SpringMVC自定义注入controller变量
springmvc config the controller parameter injection 问题描述 在SpringMVC中默认可以注入Model,ModelAndView,@Reques ...
- Android消息机制
每一个Android应用在启动的时候都会创建一个线程,这个线程被称为主线程或者UI线程,Android应用的所有操作默认都会运行在这个线程中. 但是当我们想要进行数据请求,图片下载,或者其他耗时操作时 ...
- [JavaWeb]关于DBUtils中QueryRunner的一些解读.
前言:[本文属于原创分享文章, 转载请注明出处, 谢谢.]前面已经有文章说了DBUtils的一些特性, 这里再来详细说下QueryRunner的一些内部实现, 写的有错误的地方还恳请大家指出. Que ...
- Atitit. 类与对象的存储实现
Atitit. 类与对象的存储实现 1. 类的结构和实现1 2. 类的方法属性都是hashtable存储的.2 3. Class的分类 常规类(T_CLASS), 抽象类(T_ABSTRACT T_C ...
- Redis 监控
redis 监控有 redis-live 和 redis-stat Redis-Live是一个用来监控redis实例,分析查询语句并且有web界面的监控工具,使用python编写. redis-sta ...
- salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用
提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...