相关疑难解决方法(0)

使用SupportMapFragment时,如何知道地图已准备就绪?

onCreate方法中,我正在利用它SupportMapFragment来显示地图.

    SupportMapFragment fragment = new SupportMapFragment();
    getSupportFragmentManager().beginTransaction()
            .add(android.R.id.content, fragment).commit();
Run Code Online (Sandbox Code Playgroud)

与此相关,我想添加一个标记.问题是当调用getMap为null时,我什么时候可以再试一次?是否有我可以注册的事件或我的方法本身是错的?

    mMap = ((SupportMapFragment)(getSupportFragmentManager().findFragmentById(R.id.map))).getMap();
    if(mMap == null)
        //what do I do here?
Run Code Online (Sandbox Code Playgroud)

事实上,地图显示在手机上,但我似乎没有运气获得添加标记的参考.

更新:

SupportMapFragment通过构造函数创建的原因是因为典型的setContentView崩溃并且无法正常工作.这让我处于困境,在那里我无法获得我在onCreate方法中的参考,因为我当时正在创建SupportMapFragment它.在进一步调查中,似乎我的setContentView问题是没有将Google-play-services jar和module/src设置为整个项目的一部分的副产品.完成这些后,setContentView现在可以工作,我可以getMap()像我期望的那样获得参考.

lots.xml ...

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/map"
          android:name="com.google.android.gms.maps.SupportMapFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

LotsActivity.java ...

public class LotsActivity extends FragmentActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lots);

        GoogleMap mMap;
        mMap = ((SupportMapFragment)(getSupportFragmentManager().findFragmentById(R.id.map))).getMap();
        if(mMap == null) …
Run Code Online (Sandbox Code Playgroud)

android google-maps google-maps-android-api-2

29
推荐指数
4
解决办法
3万
查看次数

Fragment中的Android SupportMapFragment

我正在尝试在片段中使用SupportMapFragment.在第一次启动时,地图显示没有任何错误.

但是当我执行一个事务到另一个片段,然后返回到地图后,我有一个错误膨胀片段.但是当我创建包含地图的片段的新实例时,我没有任何错误.

这是我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:animateLayoutChanges="true"
    tools:context=".ui.HomeMapFragment">

    <fragment
        android:id="@+id/map"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/footer"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:name="com.google.android.gms.maps.SupportMapFragment" />

    <FrameLayout
        android:id="@+id/footer"
        android:layout_height="110dp"
        android:layout_width="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="@color/colorPrimary"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我在onCreateView中实现了我的SupportMapFragment,如下所示:

 //Instantiate the map fragment
 mHolder.supportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
Run Code Online (Sandbox Code Playgroud)

我在onActivityCreated中调用onMapReady:

if (mHolder.supportMapFragment != null)
     mHolder.supportMapFragment.getMapAsync(this);
Run Code Online (Sandbox Code Playgroud)

错误日志:

    FATAL EXCEPTION: 
    main  Process: xxx.xxxx.xxxx, PID: 4441
android.view.InflateException: Binary XML file line #8: Error inflating class fragment 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
    at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
    at xxx.xxxx.xxxx.ui.HomeMapFragment.onCreateView(HomeMapFragment.java:234) 
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
    at …
Run Code Online (Sandbox Code Playgroud)

android supportmapfragment

6
推荐指数
2
解决办法
6409
查看次数