在 XML 中定义布局时以编程方式创建表行

发布于 2024-12-18 07:33:21 字数 245 浏览 1 评论 0原文

我正在尝试将行添加到我在 XML 文件中定义的 TableLayout。 XML 文件包含表的标题行。

我可以使用各种教程中的信息很好地添加新行,但是设置新行布局所需的代码是一团糟,而且每当标题行的布局发生变化时维护起来似乎很痛苦。

是否可以在 TableLayout 中创建新行,同时仍然在 XML 中定义行布局?例如,在 XML 中定义一个模板行,在代码中获取它的句柄,然后在需要时克隆该模板。

或者正确的方法是否完全不同?

I am trying to add rows to a TableLayout that I define in an XML file. The XML file contains a header row for the table.

I can add new rows quite well using info from various tutorials but the code required for setting up the layout for the new rows is a horrendous mess and it seems like a pain in the ass to maintain whenever the layout for the header row changes.

Is it possible to create new rows to a TableLayout while still defining the row layout in XML? For example define a template row in XML, obtain a handle to it in code and then clone the template whenever I need it.

Or is the right way to do this somehow completely different?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

就像说晚安 2024-12-25 07:33:21

您提出的方法将很好地工作,并且它或多或少与填充 ListView 项目时使用的常见模式匹配。

定义包含单行的布局。使用 获取 LayoutInflater LayoutInflater.from(myActivity)。使用此充气器可以像模板一样使用您的布局来创建新行。一般来说,您需要使用 LayoutInflater#inflate 为第三个 attachToRoot 传递 false 范围。

假设您想使用每个项目中带有标签和按钮的模板布局。它可能看起来像这样:(尽管你的会定义你的表行。)

res/layout/item.xml:

<LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <TextView android:id="@+id/my_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    <Button android:id="@+id/my_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
</LinearLayout>

然后在你膨胀的地方:

// Inflate the layout and find the component views to configure
final View item = inflater.inflate(R.layout.item, parentView, false);
final TextView label = (TextView) item.findViewById(R.id.my_label);
final Button button = (Button) item.findViewById(R.id.my_button);

// Configure component views
label.setText(labelText);
button.setText(buttonText);
button.setOnClickListener(buttonClickListener);

// Add to parent
parentView.addView(item);

Your proposed approach will work fine and it more or less matches the common pattern used when populating ListView items.

Define a layout that contains a single row. Obtain a LayoutInflater by using LayoutInflater.from(myActivity). Use this inflater to create new rows using your layout like a template. Generally you will want to use the 3-argument form of LayoutInflater#inflate passing false for the third attachToRoot parameter.

Let's say you wanted to use a template layout with a label and a button in each item. It might look something like this: (Though yours would define your table rows instead.)

res/layout/item.xml:

<LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <TextView android:id="@+id/my_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    <Button android:id="@+id/my_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
</LinearLayout>

Then at the point where you inflate:

// Inflate the layout and find the component views to configure
final View item = inflater.inflate(R.layout.item, parentView, false);
final TextView label = (TextView) item.findViewById(R.id.my_label);
final Button button = (Button) item.findViewById(R.id.my_button);

// Configure component views
label.setText(labelText);
button.setText(buttonText);
button.setOnClickListener(buttonClickListener);

// Add to parent
parentView.addView(item);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文