hide和show方法实现fragment切换且不重新实例化

Fragmnet在开发中用的比较多,常见的有两种切换方式。一种是replace方式,就是重新创建fragment替换掉之前的fragment。这种方式会重新实例化走生命周期,会刷新界面的数据。但是,这样会有一个问题:每次切换的时候,Fragment都会重新实例化,重新加载一边数据,这样非常消耗性能和用户的数据流量。另一种是通过hide和show方式来实现切换,通过这种方式能保留状态,能避免重新实例化而带来的“重新加载一边数据”、“消耗数据流量”的问题。下面介绍一下通过hide和show方法实现fragment切换且不重新实例化。

ps:不是说hide和show方式好,一定要用这种,选择哪种切换方式需要根据项目需求和实际情况。

下面上代码:

	/**
	 *
	 * @param from  当前的
	 *           
	 * @param to 要显示的
	 *            
	 */
	public void switchContent(Fragment from, Fragment to) {
		FragmentManager fm = getSupportFragmentManager();
		FragmentTransaction transaction = fm.beginTransaction();
		transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
		if (fromFragment == null) {
			transaction.add(R.id.contactContent, to).commit();
			fromFragment = to;
		} else if (fromFragment != to) {
			fromFragment = to;
			if (!to.isAdded()) { // 先判断是否被add过
				transaction.hide(from).add(R.id.contactContent, to).commit(); // 隐藏当前的fragment,add下一个到Activity中
			} else {
				transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
			}
		}
	}

然后直接在onCreate()里调用
public class MainActivity extends Activity {
	private Fragment fromFragment;
	private Fragment myFragment;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		if(myFragment==null){
			myFragment=new Fragment();
		}
		switchContent(fromFragment, myFragment);
	}

	
	
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值