Fragment相关
2016-09-24 18:45
302 查看
在Fragment中获取Activity
方法一:在Fragment中直接调用this.getActivity();
方法二:初始化具体的Fragment时,把Activity的引用,即Context的实例传递过去。使Fragment维持对Activity的引用。(感觉还是比较麻烦的啊。方法一多好用)
Context mContext=this; 。。。。。。 MyFragment f=new MyFragment(mContext);
在Activity中显示Fragment
manager=getFragmentManager(); transaction=getFragmentManager().beginTransaction() //把fragment加入到一个指定的layout中,同时对这个fragment指定一个Tag transaction.add(R.id.***layout,newfragment,TAG) //使用实例 fragment.isAdded()方法判断是否成功已经加入 //只有加入后,才能通过show(**)显示 transaction.hide(currentfragment) .show(newfragment)
学会使用 findFragmentByTag()
transaction.add(layout,fragment,"balabala"); manager.findFragmentByTag("balabala"); //返回值为fragment实例或者null fragment.getTag();
目前感觉使用起来比较成熟的方法:
/*** *Note: *1.在外部(比如项目中有一个Current类,专门记录程序当前运行的信息)记录当前显示的fragment的Tag. *比如String currentfragment="com.example.fragment.myFragment" * *2.通过Tag找到transaction中的fragment,避免多次add()进去,造成资源浪费 * *3.应用了反射机制 * *总结: *这个方法可以应对旋转屏幕时,出现多个Fragment重叠的bug *但是无法解决旋转屏幕重新加载activity造成的Fragment又显示第一个 * * 显示Fragment * @param cla 要显示的Fragment的Class */ private void showFragment(Class cla) { String fTAG = cla.getName(); manager = getSupportFragmentManager(); Fragment fragment = manager.findFragmentByTag(fTAG); Fragment currentFragment = manager.findFragmentByTag(BaseFragment.CurrentTAG); if (null != currentFragment && currentFragment.getClass() == cla) { return; } transaction = manager.beginTransaction(); if (null == fragment) { try { Log.e(TAG, "TAG为 " + fTAG + " 的Fragment为null"); fragment = (Fragment) Class.forName(fTAG).newInstance(); transaction.add(R.id.fragment_frameloyout, fragment , fTAG); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } if (null != currentFragment) { transaction.hide(currentFragment); Log.v(TAG, "currentfragment不为null:" + currentFragment.getClass().getSimpleName()); } else { Log.e(TAG, "currentfragment为null"); } transaction.show(fragment) .commit(); BaseFragment.CurrentTAG = fragment.getTag(); Log.v(TAG, "展示新的Fragment: " + fragment.getTag()); }
相关文章推荐
- Android:Activity和Fragment交互、Fragment控件UI升级相关内容
- Fragment相关
- andorid fragment相关知识
- Fragment相关源码解析一——FragmentManagerImpl和BackStackRecord
- Fragment相关知识点学习
- Fragment的相关用法第一篇
- Fragment相关源码阅读笔记(1)
- Fragment中相关类的介绍
- Android随笔随想-GUI-Fragment相关学习
- V4包下Fragment与app包下的Fragment的区别相关
- Viewholder内部会议纪要以及fragment相关知识总结
- Fragment ListFragment相关API
- Fragment相关API
- Android多层嵌套Fragment中调用系统相机拍照以及裁剪的相关问题解决
- Fragment的相关用法第二篇
- 解决Fragment相关问题,java-lang-illegalstateexception-activity-has-been-destroyed
- Fragment相关的笔记整理
- 第9篇.Fragment相关
- android Fragment相关概念简介
- Android基础相关面试问题-fragment面试问题