如果想要让应用用户流畅的滑动体验的话,那么就必须对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. pyhon中的内存优化机制

    一.变量的内存地址 python中变量的内存地址可以用id()来查看 >>> a = " >>> id(a) 2502558915696 二.pyhon中 ...

  2. 远程连接工具putty与mtputty

    PuTTY是一个Telnet.SSH.rlogin.纯TCP以及串行接口连接软件 官网 http://www.chiark.greenend.org.uk/~sgtatham/putty/ putty ...

  3. BZOJ 4511 洛谷3131 USACO 16.Jan 七子共

    用sum[i]表示前缀和模7的值,若存在i≤j,满足sum[i]==sum[j],则区间(i,j]的和为7的倍数. O(N)扫出sum[0]~sum[6]第一次出现的位置first和最后一次出现的次数 ...

  4. docker的容器可视化工具portainer

    1.搜索镜像 [root@holly ~]# docker search portainer 2.下载portainer [root@holly ~]# docker pull portainer/p ...

  5. MAC OS下JDK版本切换指南

    刚上手的用MAC开发的小伙伴们会发现,MAC自带JDK版本为1.6,通常会安装在 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/目录下,但是更多 ...

  6. C/C++ uchar的一个有趣用法

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51377490 图像处理中常常使用的一种 ...

  7. 清北学堂模拟赛d6t4 数组异或

    分析:直接O(n^3)做是只有50分的,可以加一点小小的优化,就是c[k]可以从c[k-1]得到,但是还是只有60分,从宏观意义上是不能继续优化了.对于这类涉及到位运算的性质的题目,将每个数转化成二进 ...

  8. [bzoj4066/2683]简单题_KD-Tree

    简单题 bzoj-4066 题目大意:n*n的棋盘,开始为均为0,支持:单点加权值,查询矩阵权值和,强制在线. 注释:$1\le n\le 5\cdot 10^5$,$1\le m \le 2\cdo ...

  9. N天学习一个linux命令之rsync

    用途 主要用于本地和远程主机同步文件 特性 1 使用增量传输算法(delta-transfer algorithm) 2 支持ssh,rsync协议 3 可以用于本地同步文件 4 本地和远程主机都需要 ...

  10. MySQL Master High Available 理论篇(一)