0

I want add 2 textviews using LinearLayout programmatically with listview. this code is one part listview adapter.

and it has error -> The specified child already has a parent. You must call removeView() on the child's parent first.

how to fix it?

public View getView(final int position, View convertView, final ViewGroup parent) {

    View itemView;


    if (convertView == null) {
        itemView = layoutInflater.inflate(R.layout.activity_delivering_partner_item, parent, false);

        final Deliveryltem deliveryltemPosition = epicerieDelivery_delivering_recipient.selectedDeliveryItem.get(position);

        time = (TextView) itemView.findViewById(R.id. delivering_item_time);
        address = (TextView) itemView.findViewById(R.id.delivering_item_address);
        name = (TextView) itemView.findViewById(R.id.delivering_item_name);
        goods = (TextView) itemView.findViewById(R.id.delivering_item_goods);
        partner_linear = (LinearLayout) itemView.findViewById(R.id.delivering_partner_goods_linear);

        LayoutInflater layoutInflater =
                (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View addView = layoutInflater.inflate(R.layout.activity_delivering_partner_item_row, null);

        TextView goods_name = (TextView) addView.findViewById(R.id.partner_goods_name_row);
        TextView goods_ea = (TextView) addView.findViewById(R.id.partner_goods_ea_row);
        String purchase_name = deliveringListActivity.purchase_name_arr.get(deliveringListActivity.purchase_num);


        for(int k = 0; k< deliveringListActivity.partner_goods_arr.size(); k++){


            if(deliveryltemPosition.delivery_order_id.equals(deliveringListActivity.partner_goods_arr.get(k).goods_order_id)){


                if(deliveringListActivity.partner_goods_arr.get(k).detail_purchase.equals(purchase_name)){

                    goods_name.setText(deliveringListActivity.partner_goods_arr.get(k).detail_product_name);
                    goods_ea.setText(deliveringListActivity.partner_goods_arr.get(k).detail_ea);

                    partner_linear.addView(addView);

                }
            }else{

            }
        }
        time.setText(deliveryltemPosition.shipping_time);
        address.setText(deliveryltemPosition.recipient_address);
        name.setText(deliveryltemPosition.recipient_name);


      return itemView;


}else{
        itemView = convertView;

        if(epicerieDelivery_delivering_recipient.selectedDeliveryItem.size() != 0){

            final Deliveryltem deliveryltemPosition = epicerieDelivery_delivering_recipient.selectedDeliveryItem.get(position);

            time = (TextView) itemView.findViewById(R.id. delivering_item_time);
            address = (TextView) itemView.findViewById(R.id.delivering_item_address);
            name = (TextView) itemView.findViewById(R.id.delivering_item_name);
            partner_linear = (LinearLayout) itemView.findViewById(R.id.delivering_partner_goods_linear);
            LayoutInflater layoutInflater =
                    (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final View addView = layoutInflater.inflate(R.layout.activity_delivering_partner_item_row, null);

            TextView goods_name = (TextView) addView.findViewById(R.id.partner_goods_name_row);
            TextView goods_ea = (TextView) addView.findViewById(R.id.partner_goods_ea_row);
            time.setText(deliveryltemPosition.shipping_time);
            address.setText(deliveryltemPosition.recipient_address);
            name.setText(deliveryltemPosition.recipient_name);

            String purchase_name = deliveringListActivity.purchase_name_arr.get(deliveringListActivity.purchase_num);




            for(int k = 0; k< deliveringListActivity.partner_goods_arr.size(); k++){
       if(deliveryltemPosition.delivery_order_id.equals(deliveringListActivity.partner_goods_arr.get(k).goods_order_id)){

                    if(deliveringListActivity.partner_goods_arr.get(k).detail_purchase.equals(purchase_name)){
                        goods_name.setText(deliveringListActivity.partner_goods_arr.get(k).detail_product_name);
                        goods_ea.setText(deliveringListActivity.partner_goods_arr.get(k).detail_ea);

                        partner_linear.addView(addView);
                }
                }else{

                }
            }

        }

      return convertView;
    }
}

3 Answers 3

1

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

Due to :

partner_linear.addView(addView);

line.

Inside for-loop adding same object of View multiple times in partner_linear.

To get it work inflate activity_delivering_partner_item_row layout in for-loop :

for(int k = 0; k< deliveringListActivity.partner_goods_arr.size(); k++){
  // inflate layout and access all Views from it here
   final View addView = layoutInflater.inflate(
                      R.layout.activity_delivering_partner_item_row, null);
   TextView goods_name = (TextView) 
                      addView.findViewById(R.id.partner_goods_name_row);

 .... your code here...

    partner_linear.addView(addView);
}
Sign up to request clarification or add additional context in comments.

1 Comment

sorry but textview is duplicated... how to fix it ..?
0

First important thing to know when you are adding a child view in Android is "A child can have only 1 parent" here the textView which you are adding is already a child for a layout in xml file so you cannot set another parent for that child.Instead of using FindViewById() try to add TextViews dynamically by creating objects for TextView class and set parameters for those textViews using LayoutParams.

Comments

0

You are adding same view again and again to parent_linear. You need to create a new view everytime you iteratate in forloop

 for(int k = 0; k< deliveringListActivity.partner_goods_arr.size(); k++){
  // inflate layout and access all Views from it here
   final View addView = layoutInflater.inflate(
                      R.layout.activity_delivering_partner_item_row, null);
   TextView goods_name = (TextView) 
                      addView.findViewById(R.id.partner_goods_name_row);

 .... your code here...

    partner_linear.addView(addView);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.