FragmentActivity + Fragment + Fragment使用过程中出现的bug
FragmentActivity + Fragment(通过hide和show来显示fragment) + Fragment(通过viewpager来显示fragment)
在Activity中
//开启事务
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); //添加首页
ft.add(R.id.content,network_fragment).commit();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction(); //隐藏
ft.hide(mFragments[mIndex]);
//判断是否添加
if(!mFragments[index].isAdded()){
ft.add(R.id.content,mFragments[index]).show(mFragments[index]);
}else {
ft.show(mFragments[index]);
} ft.commit();
在布局中
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/one_hundred_sixty"
android:background="@color/mx_plus_background" />
<include
android:id="@+id/id_ly_bottombar"
android:layout_width="wrap_content"
android:layout_height="match_parent"
layout="@layout/leftbottombar" />
</FrameLayout>
然后在fragment中会添加一个viewpager来再添加几个fragment
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_back"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <com.roadrover.libaudiosettings.widget.InterceptTouchViewPager
android:id="@+id/id_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/sixty_px"
android:background="@drawable/content_bottom"/>
<include
android:id="@+id/id_ly_bottombar"
layout="@layout/bottombar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
在fragment中的ViewPager在添加新的fragment,
设置参数的时候最好不要用setTargetFragment,自己定义一个set方法(比如setInitFragment)就可以了,
设置manager时,要用getChildFragmentManager(fragment+fragment用这个),不能用getSupportFragmentManager(activity+fragment才用这个)
这是为了避免在我切换语言之后,viewpager中的fragment显示不出来的bug。
mSpeakerFragment = new SpeakerFragment();
mSpeakerFragment.setInitFragment(EffectFragment.this); //不能直接设置fragment,耦合性太强,要使用接口回调 mAdapter = new FragmentPagerAdapter(getChildFragmentManager()) { // @Override
public Fragment getItem(int arg0) {
Logcat.d(TAG, "getItem = " + arg0);
return mFragments.get(arg0);
} @Override
public int getCount() { return mFragments.size();
} };
FragmentStatePagerAdapter getChildFragmentManager
----------------------------------------------------------
不要使用有参构造的fragment,不要使用setTargetFragment,
最好能不在fragment的onCreateView中new对象,因为在viewpager中,只会保持fragment一前一后,超出了,就会走onDestroyView(onDestroy不走)。
----------------------------------------------------------
/**
* 状态检测 用于内存不足的时候保证fragment不会重叠
*
* @param savedInstanceState
*/
private void stateCheck(Bundle savedInstanceState) {
if (savedInstanceState == null) {
fm = getFragmentManager();
FragmentTransaction fts = fm.beginTransaction();
AnimationFragment af = new AnimationFragment();
mContent = af;
fts.add(R.id.content_frame, af);
fts.commit();
} else {
AnimationFragment af = (AnimationFragment) getFragmentManager()
.findFragmentByTag(tags[]);
PlainFragment pf = (PlainFragment) getFragmentManager()
.findFragmentByTag(tags[]);
RecordFragment rf = (RecordFragment) getFragmentManager()
.findFragmentByTag(tags[]);
InformationFragment inf = (InformationFragment) getFragmentManager()
.findFragmentByTag(tags[]);
TestingFragment tf = (TestingFragment) getFragmentManager()
.findFragmentByTag(tags[]);
getFragmentManager().beginTransaction().show(af).hide(pf).hide(rf)
.hide(inf).hide(tf).commit();
}
}
FragmentActivity + Fragment + Fragment使用过程中出现的bug的更多相关文章
- ssd运行过程中遇到的bug
1.出现以下错误: 没有添加环境变量: https://github.com/weiliu89/caffe/issues/4 可以看到当前PYTHONPATH不再ssd1里面,所以需要修改,修改之后就 ...
- AndroidStudio使用过程中遇到的bug
Ref:http://www.cnblogs.com/jingmo0319/p/5781878.html 1. Error:Execution failed for task ':app:transf ...
- C# CefSharp MemoryStreamResponseFilter这个类使用过程中遇到的bug,dataIn.CopyTo(dataOut)异常
使用这个类,可以获取请求的所有数据,可用来下载网站的图片.js等 cef给出的源码 dataIn.CopyTo(dataOut);这句代码,有时候会有问题.问题是这个:dataIn.length 会大 ...
- 记录一个使用HttpClient过程中的一个bug
最近用HttpClient进行链接请求,开了多线程之后发现经常有线程hang住,查看线程dump java.lang.Thread.State: RUNNABLE at java.net.Socket ...
- Hexo之NexT配置过程中遇到的问题
写在前面 从搭建到布置到GitHub花费时间大概用了五个小时,中间删除repo N次,localhost运行正常,git上出现过404页面.若干次README.md页面,本文将简略介绍搭建过程,主要内 ...
- android FragmentActivity+FragmentTabHost+Fragment框架布局
这周比较闲,计划系统的学习一下android开发,我本是一名IOS程序员,对手机开发还是有自己的一套思路的, 固这套思路用到我当前学android上了,先选择从Main页面的tabbar部分代码入手, ...
- app包中的fragment和v4包中的fragment的使用的区别
app包中的fragment和v4包中的fragment的使用的区别 1.尽量不要用app包中的fragment,因为这个是在3.0之后才有的,支持的版本太高,在低版本中是是用不了的 2.androi ...
- FragmentActivity与Fragment两者交互方法简介(转)
FragmentActivity与Fragment两者交互方法简介 分类: Fragment 2014-07-07 18:17 88人阅读 评论(0) 收藏 举报 在Android4.0后很多时候我们 ...
- Android -- FragmentActivity添加Fragment的序列图
FragmentActivity添加Fragment的序列图
随机推荐
- Java 延迟队列使用
延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才能从该延时对列中获取任务否则获取不到…… 应用场景比较多,比如延时1分钟发短 ...
- CSS3 阴影模拟灯照效果
效果如下: 代码如下: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset= ...
- php 168任意代码执行漏洞之php的Complex (curly) syntax
今天了解了php 168的任意代码执行漏洞,Poc: http://192.168.6.128/pentest/cms/php168/member/post.php?only=1&showHt ...
- 10.Git分支-分支管理(git branch命令)、分支开发工作流
1.分支管理 git branch 不仅可以创建和删除分支,还可以做一些其他工作. 1.不带参数的 git branch ,得到本地仓库当前的分支列表.并且会显示,当期所在的分支,也就是HEAD所指 ...
- 【Spark篇】---SparkSQL初始和创建DataFrame的几种方式
一.前述 1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...
- 并发编程(十五)——定时器 ScheduledThreadPoolExecutor 实现原理与源码深度解析
在上一篇线程池的文章<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中从ThreadPoolExecutor源码分析了其运行机制.限于篇幅,留下了Scheduled ...
- C#版 - Leetcode 13. 罗马数字转整数 - 题解
C#版 - Leetcode 13. 罗马数字转整数 - 题解 Leetcode 13. Roman to Integer 在线提交: https://leetcode.com/problems/ro ...
- 从锅炉工到AI专家(1)
序言 标题来自一个很著名的梗,起因是知乎上一个问题:<锅炉设计转行 AI,可行吗?>,后来就延展出了很多类似的问句,什么"快递转行AI可行吗?"."xxx转行 ...
- ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
ServletRequest 基本概念 JavaWeb中的 "Request"对象 实际为 HttpServletRequest 或者 ServletRequest, ...
- 第一个用eclipse打包APK时报错一个错误怎么解决
这个问题也是我在android开发群里面解决的一个问题. 如果有什么想法或者想法可以在下面进行评论,我们可以一起交流一下! 我们在eclipse中开发完一个程序之后,需要将其打包为APK的安装包,我们 ...