У указанного ребенка уже есть родитель.Консоль говорит, что сначала нужно вызвать removeView () у родителя ребенка - PullRequest
0 голосов
/ 30 июня 2019

Я вижу все вопросы и ответы об этой ошибке, но не могу ее решить.

@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;
    }

Ошибка появляется, когда клавиатура активна в представлении списка, и когда клавиатура исчезает, появляется ошибка addview строка

Как я могу решить это? Я использую удалить вид.

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Причиной ошибки является то, что у вашего представления mItems.get(i).rel_pie_l уже есть родительский макет, определенный в вашем файле xx.xml, поэтому вы не можете добавить это представление в другое представление.Кроме того, вам не нужно удалять представления и повторно добавлять их, чтобы setLayoutParams работал.Просто установите их напрямую и удалите removeAllViews и addView

0 голосов
/ 30 июня 2019

Удалите это -

    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);
...