mark一下android异常 java.lang.IllegalStateException: The specified child already has a parent. You must

一直都是把笔记记在自己的本本里,今天开始,决定把它写出来,能够自己提高,也可以分享经验,第一次写博客,写得不好请见谅。
今天分享的是关于最近遇到的一个代码异常
在RecyclerView中通过自定义的HeadAdapter添加一个recycleview作为HeadView时抛出的异常

 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

意思大概是,这个特定的子view已经有一个父view了,你必须先在父view中调用removeView()函数才能在其他把它设为其他view的子view
接下来是抛出异常的代码(只写出了关键代码)

View Header=LayoutInflater.from(mContext).inflate(R.layout.headview,mRecyclerView,false); 

**RecyclerView recyclerView= (RecyclerView) Header.findViewById(R.id.head_recycle);**  

recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(ThemesDetailActivity.this,LinearLayoutManager.HORIZONTAL,false));

        ThemesDetailsHeadAdapter themesDetailsHeadAdapter=new ThemesDetailsHeadAdapter(recyclerView,mEditorses);
        recyclerView.setAdapter(themesDetailsHeadAdapter);
         **mHeaderViewRecyclerAdapter.addHeaderView(recycleView);**

其中加粗的即为引起出错的代码
代码中可以看到,Header是通过inflate函数创建的,紧接着,通过Header的findviewbyId方式获得了recycleview的实例,注意,这里即指定其父view为Header,接着调用mHeaderViewRecyclerAdapter.addHeaderView的时候,mRecyclerView直接添加了recycleview作为其子view,导致异常。
这里的关系是,Header作为mRecyclerView的子view,而recycleview又是Header的子view,如果把recycleview直接作为mRecyclerView的子view添加进去,当然就报错了
最后,理解下这几个函数的区别,可以加深对定义view的理解

1.LayoutInflater.from(mContext).inflate(xmlId,null)
2.LayoutInflater.from(mContext).inflate(xmlId,parent)
3.LayoutInflater.from(mContext).inflate(xmlId,parent,null)
4.LayoutInflater.from(mContext).inflate(xmlId,parent,false)
5.LayoutInflater.from(mContext).inflate(xmlId,null,false)
6.LayoutInflater.from(mContext).inflate(xmlId,null,true)

1.只通过xmlId创建一个view,并返回该view
2.通过xmlId创建一个view,然后把它添加为parent的子view,并返回parent
3.通过xmlId创建一个view,然后把它添加为parent的子view,然后执行view.setLayoutParams(params)(即可以设置view在父view中的属性,如layout_width,layout_herght),并返回view
4.通过xmlId创建一个view,然后把它添加为parent的子view,并返回parent
5.只通过xmlId创建一个view,并返回该view
6.只通过xmlId创建一个view,并返回该view
虽然只是个小错误,但是值得温习的还是很多的,mark一下~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值