8

我正在尝试在合并标记中使用 VIEWSTUB。它运行良好。我能够捕获ViewStub按钮的 onclicklistenr。但我想访问位于视图内的按钮。

1.主要xml:

<merge>
<LinearLayout>
<Button></Button>
<ViewStub></ViewStub>
</LinearLayout>
</merge>

2.查看存根布局

<Button android:id="@+id/button_cancel" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:minWidth="100dip"
android:text="Next" />
<ImageView 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:background="@drawable/golden_gate"
/>
</LinearLayout>

我在一个活动中膨胀视图存根......在这里我想在按钮取消上触发点击事件。如何可能

4

1 回答 1

23

假设您的 ViewStub ID 是 view_stub。您需要在活动中执行以下操作:

ViewStub viewStub = (ViewStub) findViewById(R.id.view_stub);
View inflatedView = viewStub.inflate();
Button button = (Button) inflatedView.findViewById(R.id.button_cancel);

现在您可以使用按钮做任何您想做的事情了:)也就是说,inflate 方法返回包含来自 XML 文件的实际元素的存根布局。

当然,您始终可以拥有 onClick XML 属性...

至于删除 ViewStub - 问题是双重的(检查http://developer.android.com/resources/articles/layout-tricks-stubs.html):

  • 在 ViewStub 膨胀之前 - 您实际上无法将其删除。但是,没有必要,因为 ViewStub “没有维度,它不绘制任何东西,也不以任何方式参与布局”。

  • 膨胀之后——你只需获取 ViewStub.inflate() 方法返回的视图,然后用它做任何你想做的事情——例如,隐藏它。

于 2011-05-12T07:23:22.290 回答