容器视图有0个子节点,但是当我调用view.addView(childView)时它会崩溃

时间:2016-08-10 10:03:13

标签: android android-recyclerview

我正在尝试在加载数据时第一次向列表视图(RecylcerView)添加标题一切正常但在数据再次加载后再刷新它说:

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

这是我收到此错误的地方

private void prepareHeaderFooter(HeaderFooterViewHolder vh, View view){
    //empty out our FrameLayout and replace with our header
    try {
        vHolder.headerContainer.removeAllViews();
        vHolder.headerContainer.addView(view);
        vHolder.initViews(view);
    }catch (Exception e){
        e.printStackTrace();
    }
}

当我检查这个vHolder.base视图时,childCount是0但是addView会导致stell错误

3 个答案:

答案 0 :(得分:0)

我在自定义列表视图中遇到了类似的问题,我在其中尝试添加页眉和页脚视图。

我最终尝试了这种方式:

 mHeaderContainer.removeAllViews();
    if(checkPhoneBuildVersion()){
        removeHeaderView(mHeaderContainer5);
    }


private boolean checkPhoneBuildVersion(){
    return Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH;
}

答案 1 :(得分:0)

指定的孩子已经有父母。

您添加的视图已经有父视图,请检查它。

答案 2 :(得分:0)

我修复了问题,每次刷新后我都将适配器设置为listview,这是我设置适配器的方法;

 public void fillData(final List<MyGarbageModel> data){
    try {
        if (presenter.getAdapter() == null) {
            presenter.initAdapter(data);
            presenter.getAdapter().addHeader(headerView);
            LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
            listView.setLayoutManager(layoutManager);
            listView.setAdapter(presenter.getAdapter());
        } else {
            presenter.notifyDataChanges(data);
        }
        //I moved this line to the first if scope and everything works fine
        //listView.setAdapter(presenter.getAdapter());
    }catch (Exception e){
        e.printStackTrace();
    }
}