如何将setText设置为在循环中创建的TextView?

时间:2017-08-17 21:45:49

标签: java android android-layout

我创建了一个循环来为Array中的每个单元创建一个带TextView的布局:

        for(int x = 0; x<coffeeSets.length; x++) {


        final View view = getLayoutInflater().inflate(R.layout.custom_list, container);
        TextView tv = (TextView) view.findViewById(R.id.tv1);
        TextView tv2 = (TextView) view.findViewById(R.id.tv2);
        tv.setText(coffeeSets[x].name);
        tv2.setText(coffeeSets[x].price + "\u20BD");
    }

以下是自定义布局的xml,如果重要的话:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_marginTop="20dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:background="@color/white"
    android:layout_height="wrap_content">


    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_marginBottom="15dp"
        android:layout_marginTop="15dp"
        android:layout_marginRight="20dp"
        />


</RelativeLayout>

问题在于它会根据需要创建尽可能多的布局,但它只能为第一个布局设置文本:

The first layout gets the text of the last, and the last one gets empty

我理解这是因为tv和tv2被设置为第一版布局的textview,但是如何将文本设置为其他文本?

1 个答案:

答案 0 :(得分:0)

您可以手动设置inflate(R.layout.custom_list, container, false)并添加布局(container.addView(view);),以显示在屏幕上。检查以下代码。

原因是如果您将其设置为true,或者如果您只提供该布局,它将立即附加到父布局,您无法再次添加多个项目,因为该视图已经添加。有关充气机的更多详细信息,请阅读this article

final LinearLayout container = (LinearLayout) findViewById(R.id.container);

for(int x = 0; x<coffeeSets.length; x++) {


    final View view = getLayoutInflater().inflate(R.layout.custom_list, container, false); // we can set attachToRoot as false  
    TextView tv = (TextView) view.findViewById(R.id.tv1);
    TextView tv2 = (TextView) view.findViewById(R.id.tv2);
    tv.setText(coffeeSets[x].name);
    tv2.setText(coffeeSets[x].price + "\u20BD");

    container.addView(view); // this you missed 
}