为什么我的Map片段返回null?

时间:2014-05-15 14:51:58

标签: android google-maps android-fragments

我看过this和类似帖子。

对我来说,我似乎正确地做了一切。

不过,

SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);`

返回NULL。

activty_map.xml

<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >


<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"
/>

<Button 
android:id="@+id/startgeo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Set Geo"
android:background="@android:color/transparent"
android:layout_gravity="right"/>

</FrameLayout>

我的活动中的代码:

    setContentView(R.layout.activty_map);
    SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map); //RETURNS NULL !!!
    map = mapFrag.getMap();

2 个答案:

答案 0 :(得分:1)

根据其他开发者的mentioned,Google地图需要一段时间才能加载。这就是为什么你需要在延迟一段时间之后调用你的地图初始化代码(比方说500ms)。

例如:

setContentView(R.layout.activty_map);

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map); //should'nt be null after 500ms
        map = mapFrag.getMap();
    }
}, 500);

此外,我建议您依靠onResume方法确认加载完成。

答案 1 :(得分:1)

您可以确保片段在onResumeFragments中可用,而不是仅使用一些任意延迟发布它,#http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html#onResumeFragments()