我正在尝试在加载数据时第一次向列表视图(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错误
答案 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();
}
}