我创建了一个循环来为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,但是如何将文本设置为其他文本?
答案 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
}