findViewById在<include>视图</include>上返回null

时间:2011-12-16 17:42:38

标签: android android-layout viewflipper

让我们直接进入代码。

活动代码,onCreate方法

setContentView(R.layout.main);

View main_view = findViewById(R.id.main_view);
View view_flipper = main_view.findViewById(R.id.vf);
View first_tab = view_flipper.findViewById(R.id.prev_pane);

main.xml布局代码:

<ViewFlipper android:id="@+id/vf"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >  

    <include android:id="@+id/prev_pane" layout="@layout/vf_inner" /> 
<include android:id="@+id/cur_pane" layout="@layout/vf_inner" />
    <include android:id="@+id/next_pane" layout="@layout/vf_inner" />
</ViewFlipper>

问题! 主视图已正确找到,ViewFlipper也是如此,但找不到prev_pane或cur_pane或next_pane,返回空指针。有什么想法吗?

使用Intent通过选项卡调用此活动。除了id on on includes

之外,所有引用都已正确解析

当我检查变量时,我在mChildren

中找到了vf_inner布局的内容

2 个答案:

答案 0 :(得分:8)

这是因为<include />标记不是UI层次结构中的实际视图。 它们更像是android工具的复制和粘贴指令。

如果要在运行时查找窗格,请将ID添加到包含布局的根元素中。通过这种方式,可以通过findViewById()找到它们。

答案 1 :(得分:0)

您可以做的一件事是将<include>语句包装在父布局(它仍然是您的主父布局的子级)中。为这些视图提供不同的ID,以便您可以单独findViewById