如果想要让应用用户流畅的滑动体验的话,那么就必须对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;
}
}
}); } }

android切换卡顿解决方法的更多相关文章

  1. python学习笔记 | PyCharm出现卡顿解决方法

    问题:使用pycharm时常出现 the IDE is running low on memory 的问题 表示pycharm这款IDE使用内存不足 需要在系统内存充足的情况下扩充IDE memory ...

  2. ViewPager+Fragment切换卡顿解决办法

    1.ViewPager设置预加载 我有4个tag,都不想被销毁,设置预加载个数为3. ViewPager viewPager; viewPager.setOffscreenPageLimit(3); ...

  3. Android Studio 卡顿解决

    每次升级/安装 Android Studio 之后最好都修改一下这个参数:到 Android Studio 安装目录,找到 bin/studio(64?).vmoptions(文件名可能因操作系统而不 ...

  4. h5页面滑动卡顿解决方法

    解决方式: 给滚动的元素加样式:-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling(允许独立的滚动区域和触摸回弹) 如果值为au ...

  5. Windows10 磁盘活动时间百分之百导致系统卡顿解决方法

    最近电脑边的特别慢,打开任务管理器发现是磁盘活动时间时不时的就会变成100%.起初是以为硬盘出问题了,后来网上查了一下才发现很多人都遇到过这个问题,其原因就是Windows的SuperFetch和家庭 ...

  6. .NET Core 2.0 httpclient 请求卡顿解决方法

    var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip,UseProxy ...

  7. ViewPager -- Fragment 切换卡顿 性能优化

    当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即 Fragment需要加载UI内容,而又频繁地切换Fragment, ...

  8. bootsrtap h5 移动版页面 在苹果手机ios滑动上下拉动滚动卡顿问题解决方法

    bootsrtap h5 移动版页面 在苹果手机ios滑动上下拉动滚动卡顿问题解决方法 bootsrtap框架做的h5页面,在android手机下没有卡顿问题,在苹果手机就一直存在这问题,开始毫无头绪 ...

  9. ART:Android 摆脱卡顿的希望?

    与 iOS 相比,Android 的用户体验有个相对糟糕的开始.在很长的时间里,界面一直丑小鸭,卡顿也是挥不去的痛.不过,在 Google 的全力推动,以及硬件厂商的响应下,Android 还是跨越各 ...

随机推荐

  1. java中关于数组的初始化

  2. 【Linq】

    " }; var l1 = strs.ToLookup(a => "a"); //Key=a elements=1,3 var l2 = strs.ToLookup ...

  3. do{}while(0)

    有时会在源码中或在写代码时在宏定义中用到do...while(0). 采用这种方式进行宏定义, 主要是为了防止出现以下错误 : do{}while(0) 空的宏定义避免出现warnning. #def ...

  4. [ZJOJ] 5794 2018.08.10【2018提高组】模拟A组&省选 旅行

    Description 悠悠岁月,不知不觉,距那传说中的pppfish晋级泡泡帝已是过 去数十年.数十年 中,这颗泡泡树上,也是再度变得精彩,各种泡泡 天才辈出,惊艳世人,然而,似乎 不论后人如何的出 ...

  5. rsync全网备份

    rsync备份企业方案 企业有Linux服务器又有windows服务器,备份用rsync(服务端),Linux(客户端),Windows(客户端,cwrsync,旧版本有免费版)打包压缩数据往服务器上 ...

  6. isset在php5.6-和php7.0+的一些差异

    今天在公司实现一个模块功能时写了如下代码: class ProductCategory { const TYPES = [ 1 => 'type1', 2 => 'type2', ]; p ...

  7. hdu 2782 dfs(限定)

    The Worm Turns Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. net Core 中定时任务的设置

    接下来的任务 采用定时任务的需求场景: 每天的数据整理,比如库存,每天的零散数据的统计,定时提醒,定时提醒到期未完成的任务-.... 1.采用的第三方类库: quartz 2文档地址:http://w ...

  9. Spring 源代码学习(一)

    一 .Spring容器最基本的功能 1. 读取配置文件 2. 校验配置文件的正确性 3. 将配置文件信息加载到内存 4. 通过反射实例化bean对象 5. 构建系统  二 .核心类关系图 图1-1 D ...

  10. 【codeforces 514E】Darth Vader and Tree

    [题目链接]:http://codeforces.com/problemset/problem/514/E [题意] 无限节点的树; 每个节点都有n个儿子节点; 且每个节点与其第i个节点的距离都是ai ...