动态布局:如何获取特定视图

时间:2013-05-14 19:36:03

标签: android android-layout

我有一项活动需要通过代码动态添加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。

为什么呢?我该怎么解决呢?

2 个答案:

答案 0 :(得分:1)

仔细查看the documentation

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

因此,lyt始终是您的父级,findViewById始终返回其使用R.id.name_textview ID找到的第一个元素。

您可能想要

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方法可以将视图放置在您想要的位置。

答案 1 :(得分:0)

在你的res / layout / my_image_layout.xml

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

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

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