for循环中的动态变量?

时间:2014-09-03 21:55:29

标签: java android arrays

我有一个名为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); 
然而,这并不起作用。有谁知道我怎么能实现这个目标?

2 个答案:

答案 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);