RecyclerView删除Item导致位置错乱问题
来源:互联网 发布:java gzip 编辑:程序博客网 时间:2024/05/21 06:41
最近使用RecyclreView写了一个列表,并且点击使用startActivityForResult()进入详情界面,在详情页面中实现删除这个条目(position)的操作 或者 编辑详情的内容操作(也就是改变了列表中展示的数据),然后返回时使用setResult()将(position)数据传回来,再使用notifyItemRemoved(position) 或者notifyItemChanged(position) 进行刷新,但是出问题了。
如果是删除操作 ,item的位置并没有发生改变,或者位置发生错乱,很是奇怪诡异, 然后查了下资料才发现错误:在使用notifyItemRemoved()这个方法时,由于该方法不会使position及其之后位置的itemView重新onBindViewHolder,重新刷新后面的数据会导致下标错乱。有可能产生一些坑爹的bug。
解决方法就是:使notifyItemRangeChanged(int pisitionStar , int itemCount);
如果是编辑操作,那么只需要将你改变的bean中的字段的新内容赋给原来的字段就可以了,然后使用notifyItemChanged(posiion);进行刷新。
以下就是关键代码:
删除的返回:
// TODO: 2017/5/14 通知列表页面删除成功了 Intent oa_share = new Intent(); oa_share.putExtra("position", position); oa_share.putExtra("share_flag", share_flag); setResult(JHConstants.OA_SHARE_SHAREDETAIL, oa_share); finish();
编辑或改变列表状态的返回:
/** * 点击手机返回键 * * @param keyCode * @param event * @return */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == event.KEYCODE_BACK) { if ("0".equals(share_flag)) {//编辑 Intent oa_share = new Intent(); oa_share.putExtra("position", position); oa_share.putExtra("share_flag", share_flag); oa_share.putExtra("content", content); oa_share.putExtra("attachments", (Serializable) attachments); setResult(JHConstants.OA_SHARE_SHAREDETAIL, oa_share); finish(); } else if ("2".equals(share_flag)) {//回执成功 Intent oa_share = new Intent(); oa_share.putExtra("share_flag", share_flag); oa_share.putExtra("position", position); oa_share.putExtra("as_receipt_status", shareDetail.as_receipt_status); oa_share.putExtra("as_is_receipt", shareDetail.as_is_receipt); setResult(JHConstants.OA_SHARE_SHAREDETAIL, oa_share); finish(); } } return super.onKeyDown(keyCode, event); }以下为接收的代码:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case JHConstants.OA_SEND_SHARE_REQUESTCODE://发分享,进入详情 if (resultCode == JHConstants.OA_SHARE_SENDSHARE) {//发分享成功返回 pageIndex = 1; onLoadData(pageIndex); } else if (resultCode == JHConstants.OA_SHARE_SHAREDETAIL) {//0 编辑,1 删除分享,2回执状态 String share_flag = data.getStringExtra("share_flag"); int position_change = data.getIntExtra("position", -1); String content = data.getStringExtra("content"); String as_receipt_status = data.getStringExtra("as_receipt_status"); String as_is_receipt = data.getStringExtra("as_is_receipt"); if ("0".equals(share_flag)) { shareListCodeList.get(position_change).content = content; List<OA_Share_DetailBean.ShareDetailBean.AttachmentsBean> getAttachments = (List<OA_Share_DetailBean.ShareDetailBean.AttachmentsBean>) data.getSerializableExtra("attachments"); OA_ShareListBean.ShareListCodeBean.AttachmentBean bean = null; List<OA_ShareListBean.ShareListCodeBean.AttachmentBean> attachments = new ArrayList<>(); if (getAttachments != null) { for (OA_Share_DetailBean.ShareDetailBean.AttachmentsBean attachmentBean : getAttachments) { bean = new OA_ShareListBean.ShareListCodeBean.AttachmentBean(); bean.attachment = attachmentBean.attachment; attachments.add(bean); } } shareListCodeList.get(position_change).attachments = attachments; oa_shareadapter.notifyItemChanged(position_change); } else if ("1".equals(share_flag)) { shareListCodeList.remove(position_change); oa_shareadapter.notifyItemRemoved(position_change); if(position_change != shareListCodeList.size()){ oa_shareadapter.notifyItemRangeChanged(position_change, shareListCodeList.size() - position_change); } }else if("2".equals(share_flag)){ shareListCodeList.get(position_change).as_receipt_status = as_receipt_status; shareListCodeList.get(position_change).as_is_receipt = as_is_receipt; oa_shareadapter.notifyItemChanged(position_change); } } break; } }
好啦!!这样问题就解决了!!
在下刚刚写博客,如有不满意还请多多包含。
阅读全文
1 0
- RecyclerView删除Item导致位置错乱问题
- 解决RecyclerView删除Item导致位置错乱的问题
- 解决RecyclerView删除Item导致位置错乱的问题 以及删除最后一个出错的问题
- Recyclerview 删除/插入item时,导致position错乱问题
- 【Android】- RecyclerView删除时,解决Item位置错乱的问题
- RecyclerView 点击位置错乱问题
- Recyclerview抢占焦点,导致切换fragment后位置错乱
- recyclerview 的item被remove后position的错乱问题
- 多行多列位置错乱问题
- RecyclerView的Item复用出现问题导致排版混乱
- 删除recyclerview中的item
- RecyclerView 删除item操作
- RecyclerView EditText 数据错乱问题
- 解决RecyclerView加载图片时复用itemview导致的图片数量错乱问题
- RecyclerView 获取 item 的位置
- 关于Recyclerview删除item后的数据乱跳问题
- Recyclerview Item中图片动画错乱问题解决方案
- Android recyclerview 多个布局 item数据错乱
- 第七届蓝桥杯国赛 一步之遥
- 我与python约个会:23. 企业级开发基础4:面向对象
- 【备忘】甲骨论 价值1.67万的Oracle视频课程 共46节课
- 【win7】Python安装+gensim包安装
- 【WEB API项目实战干货系列】- 接口文档与在线测试(二)
- RecyclerView删除Item导致位置错乱问题
- C#学习笔记 7 语句
- maven私服自建库无法用pom自动下载自定义库
- 【java学习】java三大框架
- unity调用脚本方法、变量之三种类型
- 使用qt内部数值动画实现弹簧效果的探索及属性带有{}和没有{}的区别
- 常见的排序算法自我总结
- js jquery 获取某一元素到浏览器顶端的距离
- 三星galaxy-s7手机镜头横扫仿真HTML特效