我有一个名为activity_main.xml的布局,这是我的父布局,然后我在for循环中插入子布局(activity_main_card.xml)。
我也有一个数组,我正在做的是使用数组的长度来确定它应该创建多少个子元素。我在子元素中使用的所有数据都存储在数组中,因此我们的想法是遍历数组,为每个循环创建一个子元素并填充数据。
相反,目前正在发生的是它正在生成3个(数组长度)子元素,但它只是用数组中的最新内容填充第一个子元素。这是因为它使变量保持不变。
我需要做的是以某种方式设置随循环迭代而变化的动态变量。
我方法的代码如下:
for (int i = 0; i < cardArray.length; i++) {
LinearLayout item = (LinearLayout)findViewById(R.id.card_holder);
View child = getLayoutInflater().inflate(R.layout.activity_main_card, item, false);
item.addView(child);
//Set objects from array to variables
String cardTitle = cardArray[i][0];
String cardContent = cardArray[i][1];
String cardImage = cardArray[i][2];
//Set XML elements to variables
TextView title = (TextView) findViewById(R.id.card_title);
TextView content = (TextView) findViewById(R.id.card_content);
ImageView image = (ImageView) findViewById(R.id.card_image);
//Load variable content into card layout
title.setText(cardTitle);
content.setText(cardContent);
image.setImageDrawable(getResources().getDrawable(getResources().getIdentifier("drawable/" + cardImage, "drawable", getPackageName())));
}
我认为我能做的就是设置如下视图:
TextView title[i] = (TextView) findViewById(R.id.card_title);
然而,这并不起作用。有谁知道我怎么能实现这个目标?
答案 0 :(得分:1)
您需要获得对刚刚创建的当前View
的引用,然后在该视图上填充TextView元素。这可以通过以下方式实现:
TextView title = (TextView) child.findViewById(R.id.card_title);
TextView content = (TextView) child.findViewById(R.id.card_content);
ImageView image = (ImageView) child.findViewById(R.id.card_image);
然而,您可能最好以不同的方式处理此问题,因为Jonathan建议ListView
和适配器可能更适合这种情况。
答案 1 :(得分:0)
您没有使用创建的View
,您在每个循环中使用活动的根布局,因为您在父视图中应用了findViewById:
变化:
TextView title = (TextView) findViewById(R.id.card_title);
通过;
TextView title = (TextView) child.findViewById(R.id.card_title);