指定的孩子已经有一个父母。控制台说必须先在孩子的父母上调用removeView()

时间:2019-06-30 19:44:31

标签: android android-view android-viewholder android-viewgroup

我看到了有关此错误的所有问题和答案,但我无法解决。

@Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v = view;
        ViewHolder holder;

        if (v == null) {
            v = mInflater.inflate(R.layout.grid_item, viewGroup, false);
            holder=new ViewHolder();
            holder.rel_pie_l=(RelativeLayout) v.findViewById(R.id.rel_pie_l); 
            v.setTag(holder);

        }else{
            holder=(ViewHolder)v.getTag();
        } 
        holder.rel_pie_l.removeAllViews();

        ViewGroup.LayoutParams params = holder.rel_pie_l.getLayoutParams();
        params.height = mItems.get(i).rel_size;
        holder.rel_pie_l.setLayoutParams(params); 
        holder.rel_pie_l.addView(mItems.get(i).rel_pie_l);


        return v;
    }

当列表视图中的键盘处于活动状态时,出现错误,而当键盘消失时,添加视图行中出现错误

我该如何解决?我使用删除视图。

2 个答案:

答案 0 :(得分:0)

删除此-

    holder.rel_pie_l.removeAllViews();

然后像这样更改代码的最后一部分-

    ViewGroup.LayoutParams params = 
     holder.rel_pie_l.getLayoutParams();
    params.height = mItems.get(i).rel_size;
    holder.rel_pie_l.setLayoutParams(params); 
    if(holder.rel_pie_l.getParent() != null) { 
   ((ViewGroup)holder.rel_pie_l.getParent()).removeView(holder.rel_pie_l); 
    }
    holder.rel_pie_l.addView(mItems.get(i).rel_pie_l);

答案 1 :(得分:0)

错误的原因是您的视图mItems.get(i).rel_pie_l已经具有在xx.xml文件中定义的父级布局,因此您无法将该视图添加到另一个视图。 另外,您无需删除视图并重新添加视图即可使setLayoutParams工作。只需直接设置它们,然后删除removeAllViewsaddView