Fragments 优化切换卡顿 & 屏蔽穿透点击事件
2016-09-21 14:07
841 查看
1、用add(R.id.frag, fragment) & hide(fragment) show(fragment)来解决切换的卡顿
当多个Fragment间切换时 会有明显的卡顿。以下就是radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { int buttonid = group.getCheckedRadioButtonId(); for(int i=0; i<rbId.length; i++) { if(buttonid == rbId[i]) { Log.d("xjj","fgs["+i+"]: "+frgs[i] ); updatefrag(frgs[i]); break; } }
因为每次切换 用的是 ft.replace(R.id.fram, fragment); 一旦用了replace 是每次都会走oncreateview的 因此当Fragment页面东西略多的时候会有明显的卡顿。
解决方法是 用FragmentTrasaction的hide 和 show方法。如下:
rivate void updatefrag (Fragment fragment){ FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); if(fragment.isAdded()) { for(Fragment fg: frgs) { if(fg == fragment) ft.show(fg); else ft.hide(fg); } } else ft.add(R.id.frame, fragment).show(fragment); ft.commit(); }
至此卡顿问题解决。 有一个缺点, 因为不是每次都oncreateview, 该页面的动画第一次放了一次之后就不再播放,后来切换过来就不再播放。当然 可以将动画写在其他周期里。
2、解决由此带来的点击穿透事件。
因为用的是add, 所以实际上 一个页面有多个Fragment, 当点击当前最上面的Fragment空白处时,会穿透该Fragment。 也就是说 若其他Fragment此处有响应事件,则此时即会响应。这就比较尴尬了。。解决方式是 写一个baseFragment 来屏蔽穿透, 然后其他Fragment继承之。 如下
public class BaseFragment extends Fragment implements View.OnTouchListener{ @Override public void onViewCreated(View view, Bundle savedInstanceState) { // block ontouch event. in case it would go down through to another fragment below view.setOnTouchListener(this); } @Override public boolean onTouch(View v, MotionEvent event) { return true; }
至此卡顿问题比较妥善地得到解决。happy~
相关文章推荐
- iOS实现UIImageView透明区域点击事件穿透(OC&swift)
- 仿网易视频列表连播炫酷效果 - v3.1 升级版-细节优化(网络状态切换、item点击事件等)
- [笨木头Cocos2dx043]小玩半透明遮罩第01篇:添加半透明遮罩,屏蔽下层点击事件
- android之点击事件ImageView切换
- Android应用开发-- 如何在页面切换的过程中屏蔽屏幕事件?
- 我是如何去了解jquery的(四),切换事件hover&toggle
- png透明部分取消点击&后边的控件事件不阻止的方法
- <a>标签的点击事件
- Launcher桌面点击&长按&拖动事件处理流程分析
- Launcher桌面点击&长按&拖动事件处理流程分析 .
- android中ListView控件&&onItemClick点击事件
- 服务器控件button点击时执行脚本弹出提示对话框Button2.Attributes.Add("onclick","事件")
- 控件点击事件会穿透给下面的界面--解决办法
- android ListView的OnItemClickListener事件被其内部Button点击事件屏蔽的解决方法
- ListView防止点击事件被子view点击事件屏蔽
- 关于VC操作Office屏蔽掉“服务器正在运行中”要选择“切换到...”或"重试"的对话框
- Flex如何实现鼠标点击事件穿透功能
- asp:Button 事件,点击事件 html Button runat=&quot;sever&quot;
- UITapGestureRecognizer会屏蔽掉Button的点击事件