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 中的对话框是一个展示在当前窗口上的小一号的窗口, ...
随机推荐
- MySQL--将MySQL数据导入到SQL Server
随着时代的进步,社会的发展,各种技术层出不穷五花八门乱七八糟数不胜数(写作文呢!!!) 不扯废话,简单而言,很多公司都会同时使用多种数据库,因此数据在不同数据库之间导入导出就成为一个让人蛋疼的问题,对 ...
- Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例
概要 前面对"独占锁"和"共享锁"有了个大致的了解:本章,我们对CountDownLatch进行学习.和ReadWriteLock.ReadLock一样,Cou ...
- Ubuntu环境搭建系列—WPS/LAMP/Python篇
由于篇幅不宜太长,所以就将此文分成了两部分,在第一部分中我们讲解了google-chrome(谷歌浏览器)的安装,jdk的环境配置,android开发的环境搭建.那么在第二部分中,位们将讲解的是金山W ...
- C# 加密–RSA前端与后台的加密&解密
1. 前言 本问是根据网上很多文章的总结得到的. 2. 介绍 RSA加密算法是一种非对称加密算法. 对极大整数做因数分解的难度决定了RSA算法的可靠性.换言之,对一极大整数做因数分解愈困难,RSA算法 ...
- CSS的样式表基本概念
一.样式表分类 1.内联样式表 <p style="fint-size:24px;">直接在标签内部进行样式设置</style> 2.内嵌样式表 <h ...
- 爱上MVC~MVC4模型验证可以放在前端
回到目录 MVC4.0推出后,在模型验证上有了一个新的改近,它支持前端验证,即在用户POST之前,如果验证失败,则Action(POST方式的)不会被执行,而直接停留在原视图,这对于用户体验是好的,它 ...
- 锋利的JQuery —— 事件和动画
大图猛戳
- salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...
- Javascript快速入门(上篇)
Javascript的熟练之路,小弟来了. JavaScript简介:JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript ...
- AIX下tar解包问题
今天,在AIX下安装tomcat,上传的版本是apache-tomcat-6.0.41.tar.gz,但用tar解压时出现以下问题: # tar xvf apache-tomcat-6.0.41.ta ...