Fragment切换问题
片断一: add hind @Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.rb_common_frame://常用框架
position = 0;
break;
case R.id.rb_thirdparty://第三方
position = 1;
break;
case R.id.rb_custom://自定义
position = 2;
break;
case R.id.rb_other://其他
position = 3;
break;
default:
position = 0;
break;
} //根据位置得到对应的Fragment
BaseFragment to = getFragment();
//替换
switchFrament(mContent,to);
/**
*
* @param from 刚显示的Fragment,马上就要被隐藏了
* @param to 马上要切换到的Fragment,一会要显示
*/
private void switchFrament(Fragment from,Fragment to) {
if(from != to){
mContent = to;
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
//才切换
//判断有没有被添加
if(!to.isAdded()){
//to没有被添加
//from隐藏
if(from != null){
ft.hide(from);
}
//添加to
if(to != null){
ft.add(R.id.fl_content,to).commit();
}
}else{
//to已经被添加
// from隐藏
if(from != null){
ft.hide(from);
}
//显示to
if(to != null){
ft.show(to).commit();
}
}
} } /**
* 根据位置得到对应的Fragment
* @return
*/
private BaseFragment getFragment() {
BaseFragment fragment = mBaseFragment.get(position);
return fragment;
}
片断二:
private void switchFrament(BaseFragment fragment) {
//1.得到FragmentManger
FragmentManager fm = getSupportFragmentManager();
//2.开启事务
FragmentTransaction transaction = fm.beginTransaction();
//3.替换
transaction.replace(R.id.fl_content, fragment);
//4.提交事务
transaction.commit();
}
片断三:
//初始化Fragmet
private void initFragment() {
fragmentList.clear();
ItemFragmentOrder itemFragmentOrder = new ItemFragmentOrder();
ItemFragmentIntent itemFragmentIntent = new ItemFragmentIntent();
fragmentList.add(itemFragmentOrder);
fragmentList.add(itemFragmentIntent);
}
//初始化ViewPager
private void initViewPager() {
mPageAdapter = new MainFragmentPageAdapter(activity.getSupportFragmentManager());
viewPager.setAdapter(mPageAdapter);
viewPager.setOffscreenPageLimit(fragmentList.size());
}
//fragmentViewPaager适配器
class MainFragmentPageAdapter extends FragmentPagerAdapter { public MainFragmentPageAdapter(FragmentManager fm) {
super(fm);
} @Override
public Fragment getItem(int position) {
return fragmentList.get(position);
} @Override
public int getCount() {
return fragmentList.size();
}
} //切换页面
public void showFragment(int position) {
viewPager.setCurrentItem(position, false);
}
片断四:
@Override
public Fragment getItem(int position) {
BaseFragment fragment = null;
switch (fragmentFlag) {
case FragmentMainVp:
switch (position) {
case MainActivity.fristPage:
fragment = new FragmentFirst();
break;
case MainActivity.order:
fragment = new FragmentOrder();
break;
case MainActivity.mine:
fragment = new FragmentMine();
break;
}//end of switch
break;
}//end of switch
Bundle bundle = new Bundle();
bundle.putInt(BaseFragment.ParamIndex, position);
if (null != paramBundle) bundle.putBundle(BaseFragment.ParamBundle, paramBundle);
if (null != fragment) fragment.setArguments(bundle);
if (null != fragmentAry) fragmentAry[position] = fragment;
return fragment;
} @Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);//得到缓存的fragment
if (needReload && null != fragment && null != fm) {
String fragmentTag = fragment.getTag();//得到tag,这点很重要
FragmentTransaction ft = fm.beginTransaction();
if (null != ft) {
ft.remove(fragment);//移除旧的fragment
fragment = getItem(position);//换成新的fragment
ft.add(container.getId(), fragment, fragmentTag);//添加新fragment时必须用前面获得的tag,这点很重要
ft.attach(fragment);
fragment.setUserVisibleHint(true);
ft.commit();
}//end of if
if ((getCount() - 1) == position)
needReload = false;//清除更新标记(只有重新启动的时候需要去创建新的fragment对象),防止正常情况下频繁创建对象
}//end of if
return fragment;
} @Override
public int getCount() {
return tabTitleCount;
}
Fragment切换问题的更多相关文章
- ViewPager+RadioGroup实现标题栏切换,Fragment切换
1.说明: 在使用RadioGroup做标题栏切换的时候,跟ViewPager的滑动有冲突,最后查看了源码+断点调试解决了一些碰到的问题,写一篇博客总结一下,有同样需求的朋友可以借鉴一下,自己以后有用 ...
- fragment切换刷新 及下拉刷新
此工程较BaiduLocationXMLFragmentDB相比:1.滑动fragment自动刷新该fragment2.下拉刷新fragment,上拉暂未实现 a.fragment切换刷新 1 . 由 ...
- ViewPager -- Fragment 切换卡顿 性能优化
当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即 Fragment需要加载UI内容,而又频繁地切换Fragment, ...
- 实现Fragment 切换时不重新实例化
以前实现Fragment的切换都是用replace方法实现 public void startFragmentAdd(Fragment fragment) { FragmentManager frag ...
- Fragment 切换问题
public void switchContent(Fragment fragment) { if(mContent != fragment) { mContent = fragment; mFrag ...
- 让多个Fragment 切换时不重新实例化、FragmentTabHost切换Fragment时避免UI重新加载
http://www.tuicool.com/articles/FJ7VBb FragmentTabHost切换Fragment时避免UI重新加载 不过,初次实现时发现有个缺陷,每次FragmentT ...
- 两层Fragment嵌套,外层Fragment切换时内层Fragment不显示内容
尊重他人劳动成果,转载请说明出处:http://blog.csdn.net/bingospunky/article/details/46847269 需求 在搭界面有这么样一个需求:须要两层的Frag ...
- 巧妙实现缺角radiogroup控制多个fragment切换和滑动
在android开发中,用一个radiogroup控制多个fragment切换是十分常见的需求.但是如果fragment是一个ListView,如何保证滑动的时候通过缺角可以看到下面的listview ...
- Android使得Fragment 切换时不重新实例化
以前实现Fragment的切换都是用replace方法实现 public void startFragmentAdd(Fragment fragment) { FragmentManager frag ...
- 让多个Fragment 切换时不重新实例化
转自:http://www.yrom.net/blog/2013/03/10/fragment-switch-not-restart/ 让多个Fragment 切换时不重新实例化 在项目中需要进行Fr ...
随机推荐
- Ubuntu下qemu环境搭建
在查找资料过程中,发现自己搭建虚拟的arm环境的话,有一个比较好的软件就是qemu了,当然还有其他的,大家各投所好就好. 接下来说一下qemu环境搭建过程. 其实搭建很简单,作为小白,我还是捣鼓了两三 ...
- Mac下安装Pyqt
1.安装sip brew install sip 2.安装pyqt brew install pyqt
- Generalization and Equilibrium in Generative Adversarial Nets
Paper link: https://arxiv.org/abs/1703.00573 Blog link: http://www.offconvex.org/2017/03/30/GANs2/ G ...
- Pandas 读取文本格式数据
title 其实书中说的我认为不够全,因为公司里面现在主要用stata和spss,暂时还没有用到sas,excel也很少用 那么读取文件的方式,因为有人已经总结了,我就偷过来算了 对应不同的文件类型有 ...
- 【WPF】鼠标拖拽功能DragOver和Drop
在Winform里面实现拖入功能只要设置控件AllowDrop=true; 然后实现方法 //拖入 private void txtInputPath_DragOver(object sender, ...
- poj 1700 Crossing River C++/Java
http://poj.org/problem?id=1700 题目大意: 有n个人要过坐船过河,每一个人划船有个时间a[i],每次最多两个人坐一条船过河.且过河时间为两个人中速度慢的,求n个人过河的最 ...
- EasyUI的combobox组件Chrome浏览器不兼容问题解决办法
EasyUI版本:jQuery EasyUI 1.4.1 Chrome浏览器版本:41.0.2272.101 m 问题描述 在Chrome浏览器下,下拉框选择选项之后,选择的值在下拉框中不显示,重新选 ...
- c# 连接mysql配置config,不用装net connector
<system.data> <DbProviderFactories> <remove invariant="MySql.Data.MySqlClient&qu ...
- IE中自定义标签使用自封闭格式引发错误!
最近学习IONIC,其中用到了ion-menu-nav-button,由于标签开始和结尾之间没有内容,所以图省事儿使用自封闭标签的写法: <ion-menu-nav-button class=& ...
- Redhat 5.6(RHEL 5.6)下安装PostgreSQL9.3
1,下载Respository的更新包 http://yum.postgresql.org/9.3/redhat/rhel-5-x86_64/pgdg-redhat93-9.3-1.noarch.rp ...