在另一个XML文件中引用视图

4

我有一个名为a.xml的文件中包含一个ListView。

<ListView
        android:id="@+id/mylistview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:scrollbars="none"
        android:layout_above="XYZ"
        />

在a.xml文件中,我还包含了另一个名为b.xml的文件。
<include android:id="@+id/bottombar" layout="@layout/b" />

在 ListView 的一个设置中,我想要引用在 b.xml 文件中存在的 id(XYZ)。

我能做到这一点吗?

我尝试了以下方法:

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <include android:id="@+id/bottombar" layout="@layout/b" />
    <ListView
        android:id="@+id/mylistview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:scrollbars="none"
        android:layout_above="@id/bottombar_background"
        />
</RelativeLayout>

在@layout/b中存在@id/bottombar_background,但是Eclipse给我抛出“无资源”错误。


“Reference”是什么意思?适当的语法取决于用法。 - James
2个回答

1

在使用了setContentView(R.layout.a)后,你应该能够使用findViewById(R.id.my_id_in_b)


2
在XML中有没有一种方法可以做到这一点? - Andrew
是的,在你的a.xml中,你应该能够使用类似android:layout_toLeftOf="@id/my_id_from_b"这样的东西。非常重要的一点是:它只在你的include标签之后才起作用,而不是之前(因为在解析时,解析器需要先知道id)。 - WarrenFaith
我已经尝试过这个,但是即使在引用了include标签后的@id,Eclipse仍然会报错。 - Andrew

0
使用以下语法:android:layout_toLeftOf="@+id/my_id_from_b"。这可以防止任何引用问题。

在此情况下,加号告诉编译器在第二次布局时进行第二次查找该ID。尝试一下-我知道它有效,因为我经常使用这种语法。


这不会创建一个相同名称的 View 的新实例吗?我想引用 @layout/b 中的 @id。 - Andrew
我已经修改了我的答案以说明这个概念 - 很抱歉,第一次使用了错误的例子。 - Caspar Harmer
编译现在通过了,但是我没有在屏幕上看到@+id/my_id_from_b。 - Andrew
哦,我也遇到这个问题了 - 让我构建一个测试项目,看看能否使其正常工作。 - Caspar Harmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接