如果mapview包含在父布局中,findViewById将返回null

时间:2012-02-04 18:15:14

标签: android google-maps android-mapview android-2.1-eclair

我有一个奇怪的问题,如果我在布局中使用include,findViewById将返回任何内容的null。

这是我的onCreate(),活动范围MapActivity

@Override
    public void onCreate(Bundle bundle)
    {
        super.onCreate(bundle);
        setContentView(R.layout.main);
                // this will be null
        MapView myMapViewmyMapView = (MapView) findViewById(R.id.mapview);

    }

这是我的布局,main.xml

<!-- Loads of other layout elements up here, buttons, headers etc-->
<LinearLayout android:layout_width="fill_parent"
                  android:id="@+id/demo_mode_layout"
                  android:orientation="vertical"
                  android:layout_height="wrap_content"
                  android:gravity="center_horizontal"
                  android:background="@drawable/panel"
                  android:layout_marginTop="5dp"
                  android:layout_marginBottom="5dp"
                  android:layout_marginLeft="5dp"
                  android:layout_marginRight="5dp">

        <!-- Include the mapview from an external mapview layout file-->
        <include android:id="@+id/header" layout="@layout/maps"/>
    </LinearLayout>

我正在引用的地图视图:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:apiKey="my legit key here"
        />

如果在我的活动中,我使用R.layout.main设置内容视图会失败,但如果我将其设置为地图实体R.layout.maps,那么一切都很好。

我想使用R.layout.main所以我可以将视图设置为包含页眉,页脚,按钮菜单等,为什么这不起作用呢?

1 个答案:

答案 0 :(得分:3)

<include android:id="@+id/header"..>

如果已设置,则覆盖包含布局中的根视图ID。在这种情况下,MapView id将替换为这个新的。

http://developer.android.com/guide/topics/resources/layout-resource.html#include-element