Java for循环中的动态变量?

Java for循环中的动态变量?,java,android,arrays,Java,Android,Arrays,我有一个名为activity_main.xml的布局,它是我的父布局,然后我将在for循环中插入一个子布局(activity_main_card.xml) 我还有一个数组,我所做的是使用数组的长度来确定它应该创建多少子元素。我在子元素中使用的所有数据都存储在数组中,因此我们的想法是在数组中循环,为每个循环创建一个子元素并填充数据 相反,目前正在发生的是,它正在生成3个(数组长度)子元素,但它只是用数组中的最新内容填充第一个元素。这是因为它保持变量不变 我需要做的是以某种方式设置动态变量,这些变量

我有一个名为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元素。这可以通过以下方式实现:

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
,适配器可能更适合这种情况。

您没有使用创建的
视图,而是在每个循环中使用活动的根布局,因为您在父视图中应用了findViewById:

更改:

TextView title = (TextView) findViewById(R.id.card_title);
通过


您不能通过ListView和适配器将这些子视图添加到父视图中吗?谢谢。这起到了“快速修复”的作用,但我将转而研究ListView和适配器。我假设我可以将任何视图分配给ListView,因为我正在使用LYou提供的新CardView。您需要一个适配器,用于在其
getView()
方法中返回您的
CardView
——与此方法相比,使用列表视图有什么好处?简言之:将所有对象加载到适配器中,然后告诉ListView使用所述适配器。本质上,您也在做同样的事情,但是ListView/Adapter将简化流程,它还具有很强的可伸缩性。在这一点上,可能还归结为偏好:)
TextView title = (TextView) findViewById(R.id.card_title);
TextView title = (TextView) child.findViewById(R.id.card_title);