多tab页切换保存各个fragment状态(包括listView/GridView滑动位置)的最佳解决方法

直接使用FragmentTranslator的replace(container,fragment)其实是先remove(),再add(),导致前一个fragment要再显示会重新调用它的onCreatView,对对象多的页面是个很

大的弊端,会出现闪一下的现象,通过对“农民伯伯”的一片博文学习,总结一下。

1.写一个BaseFragment extents Fragment(这里能保证在主页面显示各个fragment的时候不重叠)

public class BaseFragment extends Fragment
{

	@Override
	public void setMenuVisibility(boolean menuVisible)
	{
		super.setMenuVisibility(menuVisible);
		if (this.getView() != null)
			this.getView().setVisibility(menuVisible ? View.VISIBLE : View.GONE);
	}
}

2.编写各个主要的fragment页面,都是继承BaseFragment


3.在主页面控制显示,点击各个tab button中的主要函数

private void setTabSelection(int i)
	{
		resetStatus();

		// 改button被选中(改变其显示的状态)
		mButtonList[i].setSelected(true);

		// 选中button后的页面显示
		Fragment fragment = (Fragment) mFragmentPagerAdapter.instantiateItem(mContainer, i);
		mFragmentPagerAdapter.setPrimaryItem(mContainer, 0, fragment);
		mFragmentPagerAdapter.finishUpdate(mContainer);
	}
说明:

instantiateItem(布局容器FramLayout,position)是在FragmentManage中查找Fragment,没有就新建,setPrimaryItem是设置显示和隐藏,finishUpdate为提交事务。

注:农民伯伯的博文地址:http://www.cnblogs.com/over140/p/3362047.html

及demo:http://files.cnblogs.com/over140/SampleFragmentSwitch.zip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值