美文网首页
记录异常处理过程

记录异常处理过程

作者: 单线程的Cuke | 来源:发表于2022-10-16 20:24 被阅读0次

1. No view found for id Fragment

由于业务需要,项目中做了一个fragment的组件专门用来执行选图显示上传功能模块,由于表单需要,需要将组件放在RecycleView(该方法不推荐,但是奈何短期要解决问题不方便大改),在嵌入过程中报错No view found for id Fragment ,查询了源代码,大概分析了一下,可能是recyclerView的复用问题。
出错源代码:

if (!mFragment.mRestored) {
                    String resName;
                    try {
                        resName = mFragment.getResources().getResourceName(mFragment.mContainerId);
                    } catch (Resources.NotFoundException e) {
                        resName = "unknown";
                    }
                    throw new IllegalArgumentException("No view found for id 0x"
                            + Integer.toHexString(mFragment.mContainerId) + " ("
                            + resName + ") for fragment " + mFragment);
                }

解决方案:

// 每个fragment设置独立的ID,同时ID仅赋值一次,保证id 唯一,此代码在convert holder中
if (!item.isGenerated) {
           view.id = View.generateViewId()
           item.isGenerated = true
       }
//监听view 的Attach 方法,当attach 的时候添加时候执行commit方法
view.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
           override fun onViewAttachedToWindow(v: View?) {
               view.removeOnAttachStateChangeListener(this)
              //添加fragment 
               val fragment = PhotoFragment()
               fragment!!.setmMaxCount(5)
               val bundle = Bundle()
               bundle.putInt(PhotoFragment.ACTION, item.type)
               bundle.putString(Constants.NAME, item.desc)
               bundle.putParcelableArrayList(Attachment.ATTACHMENTS, item.attachList)
               item.fragment!!.arguments = bundle
               val transaction = fragmentManager.beginTransaction()
               transaction.replace(
                   view.id,
                   item.fragment!!
               )
               if (!item.fragment!!.isAdded) {
                   transaction.commitNowAllowingStateLoss()
              }
           }

           override fun onViewDetachedFromWindow(v: View?) {
           }
       })

相关文章

  • 记录异常处理过程

    1. No view found for id Fragment 由于业务需要,项目中做了一个fragment的组...

  • 异常处理设计文档

    一、异常处理流程说明 在ESB处理过程中,若发生异常,将进入异常流程的处理。一个异常处理流程大致如下: ESB处理...

  • PHP异常的捕获及处理

    系统自带异常处理 自定义异常处理 捕捉多个异常 日志记录 备注: register_shutdown_functi...

  • ASP.NET Core 异常处理与日志记录

    1. ASP.NET Core 异常处理与日志记录1.1. 异常处理1.1.1. 异常产生的原因及处理1.1.2....

  • 异常处理器

    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻...

  • SpringMVC异常处理器

    SpringMVC在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻...

  • 小程序全栈学习-自定义全局异常处理(上)

    面向过程的异常处理使得代码及其复杂,不是好的处理异常的方法。项目中常用的是全局异常处理的方式。 编写全局异常处理的...

  • Flask异常处理使用记录

    Flask异常处理使用记录 初识Flask异常处理,是使用@app.teardown_request钩子函数错处理...

  • SpringBoot-统一异常处理

    SpringBoot-统一异常处理 一、什么是异常处理 异常(exception) 是程序运行过程中发生的事件, ...

  • Java核心技术卷1异常处理阅读笔记

    异常处理 关于Java核心技术 卷1 的 异常处理章节记录 1. 检查型异常和非检查型异常 异常可以分为: che...

网友评论

      本文标题:记录异常处理过程

      本文链接:https://www.haomeiwen.com/subject/aymdzrtx.html