如果想要让应用用户流畅的滑动体验的话,那么就必须对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. 谷歌浏览器中a:link设置字体颜色无效问题

    <div id="box"> <a href="#">111111</a> <a href=""& ...

  2. Linux快速入门教程-进程管理ipcs命令学习

    使用Linux系统必备的技能之一就是Linux进程管理,系统运行的过程正是无数进程在运行的过程.这些进程的运行需要占用系统的内存等资源,做好系统进程的管理,对于我们合理分配.使用系统资源有非常大的意义 ...

  3. iptables详解(2):iptables实际操作之规则查询

    所属分类:IPtables  Linux基础 在阅读这篇文章之前,请确保你已经阅读了如下文章,如下文章总结了iptables的相关概念,是阅读这篇文章的基础. 图文并茂理解iptables 如果你是一 ...

  4. [API 开发管理] EOLINKER 升级为多产品架构, AMS V4.5 版本常见问题汇总

    自AMS4.5开始,eoLinker 全面升级为多产品架构,部分操作方式较以前有较大改变,本文针对改进部分做重点说明. 在说明之前,我们先通过以下的图文看看AMSV4.5更新了哪些内容: Q:我可以创 ...

  5. php第十五节课

    租房表 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  6. 文本框、评论框原生js

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  7. Oracle存储过程及函数的练习题

    --存储过程.函数练习题 --(1)创建一个存储过程,以员工号为参数,输出该员工的工资create or replace procedure p_sxt1(v_empno in emp.empno%t ...

  8. Spring MVC 笔记2 HelloWorld

    实现这个例子的问题 WEB-INFO目录下必须有spring的包,放在lib下:如下图(这里我直接把idea创建时宣称springmvc,然后把idea给的lib拷贝了下来,也可以的) request ...

  9. hdu6096 String

    String Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Problem De ...

  10. [bzoj2802][Poi2012]Warehouse Store_贪心_堆

    Warehouse Store bzoj-2802 Poi-2012 题目大意:一家商店的连续n天内,每一天会进货$a_i$个,有且只有一个客人回来买$b_i$个,问至多满足多少人. 注释:$1\le ...