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 ...
随机推荐
- Python_问题收录总结
python IndentationError: unindent does not match any outer indentation level的问题 用python编个作业,我先用的note ...
- C# HttpClient请求
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System ...
- 联想服务器X3650 M2 配置 RAID5 + 热备盘
实验环境: 1. 服务器型号联想 System X3650 M2 2. 六块300G SAS硬盘 实验目的: 配置RAID 5 ,搭建重要文件备份服务器. 标注:本教程六块硬盘,其中五块硬盘做R ...
- Centos7 安装redis服务
Redis的安装 1.先安装gcc编译器,否则make的时候会报错 yum -y install gcc 2.下载redis安装包,解压编译安装 $ wget http://download.redi ...
- iOS :ViewDidAppear
进入一个 UIViewController 会调用它的三个方法,分别是 viewDidLoad, viewWillAppear, viewDidAppear. 如每个方法的名字一样,在不同的方法中要处 ...
- 解决:ADODB.Stream 错误 '800a0bbc' 写入文件失败
重装更改目录为e盘后,上传文件出现问题.解决方法: 调用adodb.stream的savetofile方法时发生错误, ADODB.Stream 错误 800a0bbc 写入文件失败.(msxml3. ...
- php 区分0和空
能够区分出来的有2,4,6 方法 public function test(){ $test=; if($test==''){ echo '<br />在php中1,0即为空'; //被输 ...
- 录制iPhone屏幕并转成gif方案
app的开发经常会碰到需要演示一个交互,或者一个bug的情况,通常涉及一连串的操作以及操作的反馈,这是文字,或截图都无法表达的,视频的话还得播放器参与,最好的一个想法应该是录制屏幕然后再转成gif图片 ...
- vue实现点击关注之后及时更新列表
如图,我要实现点击关注之后列表及时更新成最新的列表. 思路很简单,主要是两点: 1.在点击关注之后去执行一个请求新的关注列表的action: 2.在vue组件中watch监听已关注列表和推荐关注列表 ...
- flexible.js移动端适配安卓高分辨不兼容问题
根据网上找到的解决办法,对于安卓设备,把dpr=1改为当前设备的dpr if (!dpr && !scale) { if (isIPhone) { // iOS下,对于2和3的屏,用2 ...