ViewPager嵌套Fragment实现item实时更新的两种方式
来源:互联网 发布:模具分析软件 编辑:程序博客网 时间:2024/06/10 00:56
ViewPager嵌套Fragment实现item实时更新的两种方式
引言
很多项目中需要viewpager嵌套多个fragment实现切换的这种大框架,但是效果实现简单,想要实现item里数据实时更新往往让人头疼,今天小编分享两个方法实现这种效果,当然,方法很多,重在分享。
可能涉及到这一类问题,往往程序员第一想到的是fragment的生命周期,利用onResume方法实现数据更新,但是嵌入到ViewPager中,其自带的预加载功能可能阻碍了我们实现某些功能,比如说每切换到一个页面想要实现一个动画效果,这样利用生命周期是不能实现的,因为在此之前fragment的生命周期已经提前执行了。好了,开始我的分享。
第一种方法:onPageScrollStateChanged()
我们知道ViewPager提供的onPageScrollStateChanged()方法自带三个int类型参数,分别为0(静止状态)、1(开始滑动,滑动进行时)、2(滑动结束)。我们可以根据需求利用这三个参数对动画效果以及数据进行更新操作,下面我已一个动画效果进行说明。
//动画集 private AnimationSet MyAnimationSet(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta){ alphaAnimation = new AlphaAnimation(0, 1.0f); scaleAnimation = new ScaleAnimation(0f, 1.0f,0.1f,1.0f); TranslateAnimation animation = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta); animation.setInterpolator(new OvershootInterpolator()); AnimationSet set = new AnimationSet(true); set.addAnimation(animation); set.addAnimation(alphaAnimation); set.addAnimation(scaleAnimation); set.setDuration(1000); set.setFillAfter(true); return set; }
//从0累加线程进度动画 runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub for(float i=0;i<=j+0.01;i=(float) (i+0.01)){ if(tag==1){ view_circlehomepager.setProgressNotInUiThread(i); }else{ view_circlehomepager1.setProgressNotInUiThread(i); } } } };
//开始动画效果 public void AllAnimation(){ StartAnimationSet(); new Thread(runnable).start(); }
@Override public void onPageScrollStateChanged(int arg0) {//实现切换fragment执行动画 if (arg0 == 2) {//arg0==2表示滑动结束 CircleHomePager1.AllAnimation();//第一个fragment执行界面更新操作 CircleHomePager2.AllAnimation();//第二个fragment执行界面更新操作 CircleHomePager3.AllAnimation();//第三个fragment执行界面更新操作 } }
第二种方法重写Fragment的setUserVisibleHint(boolean isVisibleToUser)方法
通过查看Fragment官方API我们知道setUserVisibleHint(boolean isVisibleToUser)方法先于onCreate()方法执行,意思是当我们的Fragment可见的时候执行该方法,不管viewpager是否预加载,所以我们利用此特性可以达到我们想要实现的效果。同样,我来执行上述动画效果。
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {//初始化布局 // TODO Auto-generated method stub if (rootView == null) { rootView = inflater.inflate(R.layout.fragment_circlehomepager1,container, false); initview(rootView);//绑定UI操作 } ViewGroup parent = (ViewGroup) rootView.getParent(); if (parent != null) { parent.removeView(rootView); } return rootView; }
@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(rootView!=null){ initview(rootView);//绑定UI操作 if(isVisibleToUser==true){ AllAnimation();//执行该Fragment的动画效果 }else{ stopAnimation();//不可见时停止动画效果 } } }
结束
以上两种简单方法是否完美的解决了你的问题呢,记得那句话有说,方法很多,只有你想不到的没有你做不到的。所以,加油吧,各位。如果还有任何疑问,欢迎留言。
0 0
- ViewPager嵌套Fragment实现item实时更新的两种方式
- 使用Fragment作为Item的ViewPager不更新问题.
- viewpager嵌套fragment,实现对fragment的动态删除
- RecyclerView嵌套EditView实时更新Item数据
- TabLayout两种添加tab方式,结合ViewPager+Fragment实现常见界面视图
- fragment嵌套viewpager viewpager嵌套fragment 的bug
- Viewpager + Fragment 的双层嵌套
- Viewpager 嵌套fragment的问题
- viewpager的fragment嵌套viewpager的问题
- Fragment嵌套ViewPager的网络获取数据实现滑动播放
- 简单的Fragment切换,Fragment嵌套Viewpager
- viewpager实现无限轮播的两种方式总结
- ViewPager 无限循环的两种实现方式
- Android使用Fragment嵌套Fragment的方式实现界面滑动
- ViewPager嵌套RecycleView(Fragment作为数据源)来展示10条数据,每个Item显示的内容是(Android软件开发工程师)(用自定义的Adapter 实现
- 前端实现图片上传实时预览的两种方式
- 2种方式实时滑动的ViewPager
- ViewPager嵌套Fragment切换Fragment时不更新页面
- UVa 11478 Halum BellmanFord判负权环
- 欢迎使用CSDN-markdown编辑器
- nyoj 1070 诡异的电梯【Ⅰ】 动态规划
- 说起Android的Binder,我们都能说些什么?
- 新空间RecycleView复习
- ViewPager嵌套Fragment实现item实时更新的两种方式
- 字符串反转(reverse函数)
- 给UICollectionView添加表头
- win32-hookdll,隐藏辅助进程
- POJ - 3069 Saruman's Army 萨鲁曼的大军 贪心 重庆一中高2018级竞赛班第三次测试 2016.7.24 Problem 2
- 复合数据类型
- js的全局变量和局部变量部分讲解
- Android-Fragment 的 onActivityResult 收不到结果
- unix高级环境编程-读书笔记(1)