通过RadioGroup切换Fragment,快速切换会导致Fragment重叠或者IndexOutOfBoundsException: Invalid index 1, size is 1的问题
来源:互联网 发布:php 数组按字段值排序 编辑:程序博客网 时间:2024/06/11 10:22
我的项目是MainActivity有5个radiobutton来切换5个Fragment
然后其中一个Fragment里面还嵌套了Fragment,里面的Fragment也是通过radiogroup切换2个界面
正常操作切换的时候没有问题
但是一旦快速切换 问题就出来了
快速切换Fragment里面的Fragment的时候,会导致两个Fragment重叠,两个都显示出来
快速切换MainActivity里面的Fragment的时候,会导致程序crash然后抛出IndexOutOfBoundsException: Invalid index 1, size is 1或者
Performing stop of activity that is not resumed
个人愚见是因为 代码没有执行完就进行了切换 或者是因为内存消耗过高 把Activity给销毁了而导致的
根本原因可能是比较复杂的Fragment里面有好多代码 也是耗时的
发自内心的解决方法是测试人员测不出来,哪个用户会没事儿闲的那么快速的点击啊.但是后来我的强烈责任心,职业道德还有内心深处渴望解决问题的精神帮我否定了这个解决方法.
说一下我的解决思路和方法把 因为某种原因放弃了修改源码的想法
所以只找到了治标不治本的方法 不过对于我来说也管用
只要不让用户快速点击就好了 当用户快速点击的时候 不进行监听 或者说忽略掉 只有触发一次监听间隔0.2秒或者多少秒之后才能进行下一次监听 就OK了
由于用的是RadioGroup,所以要重写OnCheckedChangeListener
public abstract class NoDoubleCheckListener implements RadioGroup.OnCheckedChangeListener{ public static final int MIN_CLICK_DELAY_TIME = 200; private long lastClickTime = 0; @Override public void onCheckedChanged(RadioGroup group, int checkedId) { long currentTime = Calendar.getInstance().getTimeInMillis(); if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME){ lastClickTime = currentTime; onNoDoubleChecked(checkedId); } } protected abstract void onNoDoubleChecked(int checkedId); }
那个200就是想要间隔的时间 然后
radioGroup.setOnCheckedChangeListener(new NoDoubleCheckListener() { xxxx }
xxxx就是override的方法,在里面进行switch项目中的radiobutton进行相应的操作
这样快速切换的时候虽然不报错不重叠了
但是radiobutton还是来回切换
想了一个还是治标不治本的办法 总感觉不稳妥 但是管用
就是用一个Hnadler定时器来控制RadioButton的clickable
在case里面设置如下
case R.id.radio1: radio1.setClickable(false); radio2.setClickable(false); radio3.setClickable(false); radio4.setClickable(false); radio5.setClickable(false); sendMessage(); switchPage(HomeFragment.TAG, HomeFragment.class, transaction); break;
private void sendMessage(){ handler.sendEmptyMessageDelayed(1,200);}
最后
private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 1: radio1.setClickable(true); radio2.setClickable(true); radio3.setClickable(true); radio4.setClickable(true); radio5.setClickable(true); break; } }};
总觉的方法不好,治标不治本 网上搜了那么多 越界 还有 Activity的异常 都没找到解决方法
- 通过RadioGroup切换Fragment,快速切换会导致Fragment重叠或者IndexOutOfBoundsException: Invalid index 1, size is 1的问题
- Listview indexOutOfBoundsException: Invalid index 1, size is 1
- Fragment 切换时 重叠问题
- android 使用fragment切换,出现fragment重叠的问题
- Fragment+RadioGroup点击切换Fragment
- 点击RadioGroup切换Fragment
- RadioGroup+RadioButton切换Fragment
- Android Studio 切换fragment重叠问题
- fragment 的切换并且解决重叠的问题
- RadioGroup+Fragment实现页面之间的切换
- RadioGroup+Fragment实现页面之间的切换
- Android异常--6. java.lang.IndexOutOfBoundsException: Invalid index 1 ,size is 1
- 异常 E/MessageQueue-JNI(796): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
- Fragment切换的问题
- 通过hide,show方式导致的fragment 重叠问题
- 解决切换Fragment切换导致重新创建Fragment问题
- # **Fragment切换时重叠显示的解决办法**
- Fragment快速切换导致闪退的解决方法
- 微信js API---WeixinJSBridge
- 满二叉树和完全二叉树
- 实现Map接口的各集合讨论
- Mesosphere开源DCOS1.7信息的准确翻译
- js操作节点
- 通过RadioGroup切换Fragment,快速切换会导致Fragment重叠或者IndexOutOfBoundsException: Invalid index 1, size is 1的问题
- redis数据结构指南:list
- Maven如何手动添加依赖的jar文件到本地Maven仓库
- 55-001-1 web前端HTML5 实现一个简单的首页
- SQL知识点
- 配合EOS platform 进行JavaScript学习
- redis数据结构指南:hash
- 剑指offer之面试题35第一次只出现一次的字符
- SQL创建表