Android fragment 切换加载数据卡顿问题

      接着上一篇项目的进度,上一篇讲了如何利用fragment来实现下拉菜单,公用菜单,以实现切换主界面数据的功能,这时候遇到的问题是:使用了fragment的切换界面方法,但加载的数据太多,用户从一个界面切换到这个界面的时候,至少有一两秒的卡顿,这是无法忍受的,代码如下:

private void initOpenMenuItem(View popupWindow_view) {
DrawableCenterTextView menu_price = (DrawableCenterTextView) popupWindow_view
.findViewById(R.id.menu_price);


menu_price.setOnClickListener(new OnClickListener() {
FragmentTransaction transaction;

@Override
public void onClick(View v) {
transaction = manager.beginTransaction();
transaction.replace(R.id.fragment_container, priceFragment);
titleView.setText(priceFragment.getFragmentTitle());
transaction.commit();
popupWindow.dismiss();
}
});
}
     上述代码在切换fragment界面的时候,根据fragment的方法api,replace是要重新生成实例的,这就势必导致数据重新加载,我们必须得采取隐藏的方式或者加一个进度条来缓解。这里我采用的是fragment提供的hide方法,来实现数据的快速显示,修改代码如下:

private void initOpenMenuItem(View popupWindow_view) {
		DrawableCenterTextView menu_price = (DrawableCenterTextView) popupWindow_view
				.findViewById(R.id.menu_price);

		menu_price.setOnClickListener(new OnClickListener() {
			FragmentTransaction transaction;

			@Override
			public void onClick(View v) {
				transaction = manager.beginTransaction();
				/*
				 * qiulinhe:2015年7月21日10:54:51
				 * 解决切换卡顿的问题
				 */
				if (!priceFragment.isAdded()) {    // 先判断是否被add过
	                transaction.hide(openPositionFragment).add(R.id.fragment_container, priceFragment).commit(); // 隐藏当前的fragment,add下一个到Activity中
	                titleView.setText(priceFragment.getFragmentTitle());
				} else {
	                transaction.hide(openPositionFragment).show(priceFragment).commit(); // 隐藏当前的fragment,显示下一个
	                titleView.setText(priceFragment.getFragmentTitle());
				}</span>
				
				popupWindow.dismiss();
			}
		});

	}
       原理就是:

翻看了Android官方Doc,和一些组件的源代码,发现,replace()这个方法只是在上一个Fragment不再需要时采用的简便方法。

正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。
这样就能做到多个Fragment切换不重新实例化:


            由于是公司项目,不能上传整个工程文件,不过可以参考一下我的解决方式,有同样的问题的同学可以交流一下还有没有更优雅的解决办法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值