使用LayoutInflater向Fragment添加多个视图

时间:2011-12-08 12:03:56

标签: android

我试图使用LayoutInflater将一些视图放入Fragment中。它们是TextViews,但我似乎只能在我添加的第一个上设置值。它似乎是一个id冲突导致问题,但我不知道如何克服这个问题。 我的onCreateView的相关位如下所示:

    ViewGroup vg = (ViewGroup) inflater.inflate(R.layout.data_viewer,
            container, false);

    HashMap<String, Long> titles = mHelper.getTitles("firestations");

    for (String key : titles.keySet()) {
        **View row = inflater.inflate(R.layout.row, vg, true);
        TextView label = (TextView) row.findViewById(R.id.textView1);
        label.setText(key);**
        TextView value = (TextView) row.findViewById(R.id.textView2);
        value.setText(getArg(key));
    }

正如你从星号线上可以看到的那样,我正在给一行排空&#39; (这只是一个水平线性布局,有2个文本视图,其中包含textView1和textView2)。我提供了我膨胀的ViewGroup的句柄并传递true以获取附加到父级的视图。所有这一切似乎都很好。然后我在我刚刚膨胀的行上调用findViewById。我本以为这个发现只能找到那一特定行的孩子。它看起来像是使用更宽的范围并匹配整个id组(它们是相同的 - 它们都来自同一块xml)。它然后给了我第一个。 所有这一切的结果是我正在使用显示在顶部TextView对上的最后一行数据正确布局屏幕。其余的TextViews都有xml定义的默认文本。

任何人都知道如何解决这个问题?

谢谢,

Anthony Nolan

1 个答案:

答案 0 :(得分:1)

看起来支持代码中可能存在小错误。显式添加视图(而不是使用true param)可以正常工作:

    for (String key : titles.keySet()) {
        View row = inflater.inflate(R.layout.row, vg, false);
        TextView label = (TextView) row.findViewById(R.id.textView1);
        label.setText(key);
        TextView value = (TextView) row.findViewById(R.id.textView2);
        value.setText(getArg(key));
        vg.addView(row);
    }