在 ListView 中动态添加 LinearLayout

Posted

技术标签:

【中文标题】在 ListView 中动态添加 LinearLayout【英文标题】:Adding LinearLayout inside a ListView dynamically 【发布时间】:2020-07-26 19:51:48 【问题描述】:

我创建了一个片段 OrderFragment,其中我创建了两个选项卡 Order_Subscription 和 Order_OneTime,每个选项卡也是一个片段。我在两个片段中使用了 listView。

<ListView
    android:layout_
    android:layout_
    android:id="@+id/listViewSubscription">
</ListView>

我想以 row_order.xml 的格式填充列表视图,其中包含客户详细信息和他们购买的产品(LinearLayout,id= "product_details" 下面)。产品的数量可以是可变的,所以我想动态添加线性布局。

row_order.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:padding="10dp"
    android:id="@+id/row_card"
    android:orientation="vertical">
    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="horizontal">


        <TextView
            android:id="@+id/customer_name"
            android:layout_
            android:layout_
            android:layout_weight="5"
            android:text="Customer Name"
            android:textStyle="bold">

        </TextView>

        <TextView
            android:id="@+id/address_phoneno"
            android:layout_
            android:layout_
            android:layout_weight="5"
            android:text="Phone Number"
            android:textStyle="bold">

        </TextView>

        <TextView
            android:id="@+id/amount_left"
            android:layout_
            android:layout_
            android:layout_weight="5"
            android:text="Amount Left"
            android:textStyle="bold">

        </TextView>
    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="horizontal"
        android:paddingLeft="20sp"
        android:paddingRight="10sp"
        android:id="@+id/product_details">

        <TextView
            android:id="@+id/product_name"
            android:layout_
            android:layout_
            android:layout_weight="5"
            android:gravity="center_vertical"
            android:text="Product Name">

        </TextView>

        <TextView
            android:id="@+id/quantity_order"
            android:layout_
            android:layout_
            android:layout_weight="5"
            android:gravity="center_vertical"
            android:text="Qty">

        </TextView>

        <TextView
            android:id="@+id/amount_order"
            android:layout_
            android:layout_
            android:layout_weight="5"
            android:gravity="center_vertical"
            android:text="Amount">

        </TextView>

        <CheckBox
            android:id="@+id/delivered_checkbox"
            android:layout_
            android:layout_
            android:gravity="center_vertical">

        </CheckBox>
    </LinearLayout>



</LinearLayout>

在Order_Subscription.java Fragment中,我的getView函数如下。

public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) 
            //Following is for Customer Details. This works
            LayoutInflater layoutInflater = (LayoutInflater) getActivity().getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View row_order = layoutInflater.inflate(R.layout.row_order, parent, false);
            TextView cust_name = row_order.findViewById(R.id.customer_name);
            TextView ph_no_addr = row_order.findViewById(R.id.address_phoneno);
            TextView amnt = row_order.findViewById(R.id.amount_left);
            cust_name.setText(customerName[position]);
            ph_no_addr.setText(ph_no[position]);


            //Product details I want to add. Right now adding without loop
           LinearLayout linearLayout = (LinearLayout)row_order.findViewById(R.id.product_details);
           linearLayout.removeAllViews();
           View child = getLayoutInflater().inflate(R.id.product_details, null);
            TextView prod_name = linearLayout.findViewById(R.id.product_name);
            prod_name.setText("New Product");
            TextView quat_order = linearLayout.findViewById(R.id.quantity_order);
            TextView amnt_order = linearLayout.findViewById(R.id.amount_order);
            quat_order.setText("50");
            amnt_order.setText("100");
            linearLayout.addView(child);




            return row_order;
        
    

我想动态添加产品详细信息。由于 XML,默认情况下有一组 LinearLayout(product_details)。 RemoveAllViews() 能够清除它。如果我不使用 removeAllView 函数,我可以设置该布局的文本。

我已经查过了:android: listview in listview 我无法弄清楚我哪里出错了。

【问题讨论】:

使用RecyclerView @OhhhThatVarun 只是为了内部的 LinearLayout 还是整个东西?抱歉,我是 Android 新手。 【参考方案1】:

强烈建议您如果不想使用ReceyclerView,那么至少使用ListAdapterListView,这样它就可以为您处理添加绑定和删除的wiew。

这是example

【讨论】:

以上是关于在 ListView 中动态添加 LinearLayout的主要内容,如果未能解决你的问题,请参考以下文章

在flutter中使用listview.builder添加多个彼此不同的动态小部件

C# wpf listview 如何动态添加 高手回答下

android listview 怎么添加数据

android如何给listview添加动态加载数据

通过自定义适配器在 Listview 的 ImageView 中动态添加图片

请问在android的listView中怎么动态加入radioButton和Button按钮?