关于FragmentManager findFragmentById 返回nul
先看Fragment的两种生成方式
一.用xml标签生成
在fragment的宿主activity中添加xml标签
<fragment
android:id="@+id/fragment_newsContent"
android:name="com.firstcode.section4_news.NewsContentFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
name为你创建的fragment类
这种方法在activity创建时fragment已经生成了
在Activity中获取fragment实例的操作:
NewsContentFragment fragment = (NewsContentFragment) getFragmentManager().findFragmentById(R.id.fragment_newsContent);
二、用java代码动态生成
在fragment的宿主activity的视图文件中添加FrameLayout进行占位
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentContainer"/>
在Activity中生成fragment的操作
FragmentManager fm = getFragmentManager();
fm.beginTransaction()
.add(R.id.fragmentContainer,“你创建的fragment类实例”)
.commit();
问题分析:
我在使用用FragmentManager.findFragmentById 返回nul的问题就在这,我是通过第二种方式来生成fragment的,也就是说在findFragmentById的实参
我填的是FrameLayout的Id,而非fragment的Id 所以会返回null
解决方案:
1.如果是静态生成fragment,获取fragment实例用getFragmentManager().findFragmentById
2.如果是java代码动态生成fragment,获取fragment实例直接new 一个就好了 没必要用getFragmentManager().findFragmentById
3.注意xml文件中的标签FrameLayout与fragment
还有个问题,我也是这样解决的 在fragment视图里给textview添加文字
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
原因是通过java代码生成的fragment add里的Id参数填的是fragment的id 所以fragment的视图没有生成
理解两种fragment生成方式最好的文档莫过于google官方的Android Training下面是中文翻译
关于FragmentManager findFragmentById 返回nul的更多相关文章
- Fragment使用findFragmentById返回null
@Override public void onClick(View v) { switch (v.getId()){ case R.id.btn1: replaceFragment(new Anot ...
- Xamarin.Android之Fragment Walkthrough
利用Fragment设计能够兼容不同屏幕的应用 这里我们先围观下最后的成果图,给读者打打气: 普通手机上显示的结果: 在平板上显示的结果: 笔者要郑重声明下,虽然看似是两种不同的显示效果,但是同一个应 ...
- 安卓中的Model-View-Presenter模式介绍
转载自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0425/2782.html 英文原文:Introduction to M ...
- POI
一.简介 POI(Point of Interest),中文可以翻译为“兴趣点”.在地理信息系统中,一个POI可以是一栋房子.一个商铺.一个邮筒.一个公交站等. 1.POI检索 百度地图SDK提供三种 ...
- Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
嵌套Fragment的使用及常见错误 嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment. 使用时, 主要要依靠宿主Fragment的 ge ...
- Android中的接口回调技术
Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...
- 怎么通过activity里面的一个按钮跳转到另一个fragment(android FragmentTransaction.replace的用法介绍)
即:android FragmentTransaction.replace的用法介绍 Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,他们之间最 ...
- Fragment学习笔记
Fragment为大量型号,尺寸,分辨率的设备提供了一种统一的UI优化方案.将Activity分解为多个Fragment,将极大地提高UI的灵活性,也更容易为一些新的设备配置带来更好的用户体验. on ...
- Xamarin.Android开发实践(十六)
Xamarin.Android之Fragment Walkthrough 利用Fragment设计能够兼容不同屏幕的应用 这里我们先围观下最后的成果图,给读者打打气: 普通手机上显示的结果: 在平板上 ...
随机推荐
- springMVC之HelloWorld
一.总结 1.web项目一定要把引用的jar包放在WEB-INF/lib下(common-logging1.2,spring4.1.6所有包,其实不需要那么多,懒得筛选了,) 2.web.xml中要初 ...
- Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 引自http://www.blogjava.net/TiGERTiAN/archive/2008/10/25/236519.html
Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...
- VC 类泡泡龙游戏算法
#include <stdio.h> #include <malloc.h> #include <string.h> /* 1 2 1 2 2 1 2 1 2 1 ...
- Cesium简介
一.Cesium介绍 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎.Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的触摸支持 ...
- c# 动态调用webserver
object[] paramList = new object[1]; paramList.SetValue("123456",0); //参数值,参数位置 var result ...
- vs 中无法加载项目的解决方案
有时,我们在vs 中打开工程项目时,会出现这样的错误,项目无法加载,解决方案如下: 错误提示: 解决方案: 在vs 中单独打开 工程配置文件 ,然后修改配置,将红圈处的内容注释掉: 重新加载项目:
- Bug修复问题
采用下面的代码,访问网页:http://www.weather.com.cn/data/cityinfo/101010100.html,想读取下图中红框中的内容,但是抛出了IOException,通过 ...
- ASP.NET MVC4 学习系统四(视图)
视图(Views) 在ASP.NET MVC框架中,想要返回给用户HTML的控制器操作,就要返回ActionResult类型的ViewResult实例,ActionResult知道如何渲染应答结 ...
- h5 吸顶效果 顶部悬浮
window.onscroll = function(){ var scrollTop = document.documentElement.scrollTop || document.body.sc ...
- 【Hibernate 6】常用的hql语句以及N+1问题
HQL:Hibernate Query Language,是Hibernate框架中的查询语言,十分接近于SQL语言!以下介绍一些常用的Hql语句: 一.测试类 Classes类: <span ...