2

我有一个活动,我需要通过代码动态添加 LinearLayout(因为它取决于用户输入)。所以,这就是我所做的:

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout lyt = (LinearLayout) inflater.inflate(R.layout.row_edit, mLytRows);
TextView tvName = (TextView) lyt.findViewById(R.id.name_textview);
tvName.setText(user.getName());

其中R.layout.row_edit是一个LinearLayout,其中有一些视图,包括一个TextView,而mLytRows一个引用的LinearLayout(在UI的XML中定义),我想在其中添加row_edit布局。

根据用户输入,我多次重复此代码,这就是问题所在:当我尝试引用 TextView 时,我得到了我添加的第一个 LinearLayout 的 TextView。

为什么?请问我该如何解决?

4

2 回答 2

1

仔细查看文档

如果在 中指定第二个参数inflate(),则该方法返回父视图,而不是膨胀的视图。

因此,lyt始终是您的父级,并且始终返回它找到的带有IDfindViewById的第一个元素。R.id.name_textview

你可能想做

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout lyt = (LinearLayout) inflater.inflate(R.layout.row_edit, null);
TextView tvName = (TextView) lyt.findViewById(R.id.name_textview);
tvName.setText(user.getName());
mLytRows.addView(lyt);

ViewGroup中,您可以看到有几种addView方法可以将视图放置在您想要的位置。

于 2013-05-14T19:44:39.113 回答
0

在你的 res/layout/my_image_layout.xml

<LinearLayout 
    android:id="@+id/buttons"
    ...>
    <ImageView ...
    </ImageView>
</LinearLayout>

要通过 app/src/java/MyClass.java 代码中的 @+id 值获取该布局,请执行以下操作:

    String myLinearLayoutName = "buttons";
    LinearLayout myLinearLayoutID2 = (LinearLayout) activity.findViewById(activity.getResources()
            .getIdentifier(myLinearLayoutName, "id", activity.getPackageName()));

    /*Bottom code changes that LinearLayout's background to a different image. "bomb" (R.mipmap.bomb) is the name of an image I have in my drawable folder. */
    myLinearLayoutID2.setBackgroundResource(R.mipmap.bomb);
于 2018-04-03T05:41:01.260 回答