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的更多相关文章

  1. ssd运行过程中遇到的bug

    1.出现以下错误: 没有添加环境变量: https://github.com/weiliu89/caffe/issues/4 可以看到当前PYTHONPATH不再ssd1里面,所以需要修改,修改之后就 ...

  2. AndroidStudio使用过程中遇到的bug

    Ref:http://www.cnblogs.com/jingmo0319/p/5781878.html 1. Error:Execution failed for task ':app:transf ...

  3. C# CefSharp MemoryStreamResponseFilter这个类使用过程中遇到的bug,dataIn.CopyTo(dataOut)异常

    使用这个类,可以获取请求的所有数据,可用来下载网站的图片.js等 cef给出的源码 dataIn.CopyTo(dataOut);这句代码,有时候会有问题.问题是这个:dataIn.length 会大 ...

  4. 记录一个使用HttpClient过程中的一个bug

    最近用HttpClient进行链接请求,开了多线程之后发现经常有线程hang住,查看线程dump java.lang.Thread.State: RUNNABLE at java.net.Socket ...

  5. Hexo之NexT配置过程中遇到的问题

    写在前面 从搭建到布置到GitHub花费时间大概用了五个小时,中间删除repo N次,localhost运行正常,git上出现过404页面.若干次README.md页面,本文将简略介绍搭建过程,主要内 ...

  6. android FragmentActivity+FragmentTabHost+Fragment框架布局

    这周比较闲,计划系统的学习一下android开发,我本是一名IOS程序员,对手机开发还是有自己的一套思路的, 固这套思路用到我当前学android上了,先选择从Main页面的tabbar部分代码入手, ...

  7. app包中的fragment和v4包中的fragment的使用的区别

    app包中的fragment和v4包中的fragment的使用的区别 1.尽量不要用app包中的fragment,因为这个是在3.0之后才有的,支持的版本太高,在低版本中是是用不了的 2.androi ...

  8. FragmentActivity与Fragment两者交互方法简介(转)

    FragmentActivity与Fragment两者交互方法简介 分类: Fragment 2014-07-07 18:17 88人阅读 评论(0) 收藏 举报 在Android4.0后很多时候我们 ...

  9. Android -- FragmentActivity添加Fragment的序列图

    FragmentActivity添加Fragment的序列图

随机推荐

  1. [Swift]LeetCode50. Pow(x, n) | Pow(x, n)

    Implement pow(x, n), which calculates x raised to the power n (xn). Example 1: Input: 2.00000, 10 Ou ...

  2. [Swift]LeetCode878. 第 N 个神奇数字 | Nth Magical Number

    A positive integer is magical if it is divisible by either A or B. Return the N-th magical number.  ...

  3. Redis 设计与实现 (八)--排序、慢查询日志、监视器

    一.排序 SORT <key>  对一个数字值的key进行排序 1.alpha 对字符串类型的键进行排序 2.asc / desc redis 默认升序排序asc desc 与之相反 3. ...

  4. DMA的基本概念

    DMA允许外围设备和主内存之间直接传输 I/O 数据, DMA 依赖于系统.每一种体系结构DMA传输不同,编程接口也不同. 数据传输可以以两种方式触发:一种软件请求数据,另一种由硬件异步传输. 在第一 ...

  5. kernel:NMI watchdog: BUG: soft lockup - CPU#6 stuck for 28s! CentOS7linux中内核被锁死

    环境说明:虚拟机 CentOS7中解压一个8G的包时,内核报错 Message from syslogd@cosmo-01 at Apr 25 11:05:59 ... kernel:NMI watc ...

  6. 插入与归并(python)(原创)

    根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...

  7. npm WARN deprecated socks@1.1.10: If using 2.x branch, please upgrade to at least 2.1.6

    cnpm安装的时候出现的一个问题. 使用npm install cnpm -g --registry=https://registry.npm.taobao.org命令的时候就会出现下图中的WARN. ...

  8. How does the vuejs add the query and walk the object?

    让这个老实返回的页面添加特殊路由,这个页面常常都是登录注册.这次我们根据登录举例. 省略 { path:'/login?url=:url', name:'loginfirst', component: ...

  9. C# for Python(Nugut Iron包)

    cInronPython是一种在.NET和Mono上实现的Python语言,使用InronPython就可以在.NET环境中调用Python代码 安装InronPython Python: port ...

  10. Lucene 06 - 使用Lucene的Query API查询数据

    目录 1 Query对象的创建(方式一): 使用子类对象 1.1 常用的Query子类对象 1.2 常用的Query子类对象使用 1.2.1 使用TermQuery 1.2.2 使用NumericRa ...