簡體   English   中英

以編程方式使用Linearlayout添加文本視圖

[英]adding textviews using Linearlayout programmatically

我想使用帶有列表視圖的LinearLayout以編程方式添加2個文本視圖。 此代碼是listview適配器的一部分。

並且有錯誤->指定的子代已經有一個父代。 您必須先在孩子的父母上調用removeView()。

如何解決?

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

指定的孩子已經有一個父母。 您必須先在孩子的父母上調用removeView()

由於 :

partner_linear.addView(addView);

線。

for-loopfor-looppartner_linear多次添加View的相同對象。

要使其工作,請在for循環中添加activity_delivering_partner_item_row布局:

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

在Android中添加子視圖時要知道的第一件重要事情是“一個孩子只能有1個父對象”,這里要添加的textView已經是xml文件布局的子對象,因此您不能為該子對象設置另一個父對象代替使用FindViewById()嘗試通過為TextView類創建對象並使用LayoutParams設置這些textView的參數來動態添加TextView。

您一次又一次將相同的視圖添加到parent_linear。 每次在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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM