最近项目中用到了一个条目展开关闭的效果,出于效率的问题采用了三方工具BaseMultiItemQuickAdapter(请自行百度),功能很快完成了但是问题也出现了,因为产品的需求需要进入页面条目就展开,最初的时候是崩溃,我以为测试环境数据问题,于是乎常用的方法try...catch...捕获下异常,但是问题来了,数据加载不全,没办法把异常打印出来看看吧,发现并不是数据问题,原因是因为expand()这个方法调用刷新数据的操作,而我恰恰是在填充数据的同时调用的,所有报异常了,既然找到问题了就一定有解决的办法
if (!mapStatus.containsKey( parentItem.getId() ) && mapStatus.get( parentItem.getId() ) == null ){//记录状态,确保不会重复展开动作,导致页面不停闪动 helper.itemView.postDelayed( new Runnable() {//此处必须做延迟操作不然会异常 @Override public void run() { if (helper.getAdapterPosition() != -1 && !parentItem.isExpan()){ mapStatus.put( parentItem.getId(),true ); expand( helper.getAdapterPosition() ); } } },100 ); }
做了一个延迟操作游戏的解决了这个异常的问题,但是每次滑动都会走这个方法,导致页面不停的闪动,所有用了一个map集合保存了状态,完美的解决