android 切换卡顿解决方法

如果想要让应用用户流畅的滑动体验的话,那么就必须对activity和fragment的生命周期有一个完整的概念以及在何种情况下会触发哪些事件。


在自己目前做的项目中,就遇到了这样的问题,那么就把自己的解决方法罗列,重点在于onpause,onstop,onstart,onresume的事件处理。

某些耗时的操作延迟加载,先展示总体页面。

当对某些复杂的页面进行切换时,先隐藏后显示,如果不是特别卡顿不需要隐藏,如果卡顿严重的话强烈推荐隐藏,提升用户体验。


代码如下:

package com.hengtiansoft.mecb.fragment;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.widget.RadioGroup.OnCheckedChangeListener;

import com.hengtiansoft.mecb.R;
import com.hengtiansoft.mecb.adapter.FragmentTabPagerAdapter;
import com.hengtiansoft.mecb.adapter.ProductOnSaleAdapter;
import com.hengtiansoft.mecb.model.MenuProductOnSaleModel;
import com.viewpagerindicator.UnderlinePageIndicator;

public class MenuProductFragment extends BaseFragment{
	
	private ViewPager mVpProductPage;
	private FragmentTabPagerAdapter mTabPagerProductAdapter;
	private List<BaseFragment> mProductTabFragment;
	
	private RadioGroup mRgProductTab;
	private RadioButton mRbOnSale;
	private RadioButton mRbForSale;
	private RadioButton mRbOffSale;
	
	private UnderlinePageIndicator mIndicator;
	private View mView;
	
	//流畅显示切换所用的线程
	private Handler handler = new Handler();
	
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		mView = inflater.inflate(R.layout.fragment_menu_product, container, false);
		initView(mView);
		
		return mView;
	}
	
	@Override
	public void onStart() {
		super.onStart();
		handler.postDelayed(new Runnable() {
			public void run() {
				setData(mView);
			}
		}, 200);
		setListener(mView);
	}
	
	

	@Override
	public void onResume() {
		super.onResume();
		handler.postDelayed(new Runnable() {
			public void run() {
				mVpProductPage.setVisibility(View.VISIBLE);
			}
		}, 0);
	}

	@Override
	public void onPause() {
		super.onPause();
		handler.postDelayed(new Runnable() {
			public void run() {
				mVpProductPage.setVisibility(View.INVISIBLE);
			}
		}, 100);
	}
	
	private void initView(View view) {
		mVpProductPage = (ViewPager)view.findViewById(R.id.vp_product_page);
		mIndicator = (UnderlinePageIndicator)view.findViewById(R.id.indicator_product_sort);
		mRgProductTab = (RadioGroup) view.findViewById(R.id.rg_product_tab);
		mRbOnSale = (RadioButton)view.findViewById(R.id.rb_product_onsale);
		mRbOffSale = (RadioButton)view.findViewById(R.id.rb_product_offsale);
		mRbForSale = (RadioButton)view.findViewById(R.id.rb_product_forsale);
	}
	
	private void setData(View view) {
		mProductTabFragment = new ArrayList<BaseFragment>();
		mProductTabFragment.add(new ProductOnSaleFragment());
		mProductTabFragment.add(new ProductForSaleFragment());
		mProductTabFragment.add(new ProductOffSaleFragment());
		
		mTabPagerProductAdapter = new FragmentTabPagerAdapter(mProductTabFragment,
				getChildFragmentManager());
		mVpProductPage.setAdapter(mTabPagerProductAdapter);
		mVpProductPage.setOffscreenPageLimit(2);
		mIndicator.setViewPager(mVpProductPage);
		mIndicator.setFades(false);
	}
	
	private void setListener(View view) {
		mRgProductTab.setOnCheckedChangeListener(new OnCheckedChangeListener(){

			@Override
			public void onCheckedChanged(RadioGroup arg0, int checkedId) {
				if(checkedId == mRbOnSale.getId()){
					mVpProductPage.setCurrentItem(0,false);
				}else if(checkedId == mRbForSale.getId()){
					mVpProductPage.setCurrentItem(1,false);
				}else{
					mVpProductPage.setCurrentItem(2,false);
				}
			}
		});
		
		mIndicator.setOnPageChangeListener(new OnPageChangeListener(){

			@Override
			public void onPageScrollStateChanged(int position) {
			}
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
			}
			@Override
			public void onPageSelected(int position) {
				switch(position){
				case 0:
					mRbOnSale.setChecked(true);
					break;
				case 1:
					mRbForSale.setChecked(true);
					break;
				case 2:
					mRbOffSale.setChecked(true);
					break;
				default:
					break;
				}
			}
		});
		
		
		
	}

}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值