标记不起作用(不显示确切的位置),只有世界地图在Frgament中可见

时间:2016-07-01 06:22:29

标签: android android-studio

CustomMapFragment

public class CustomMapFragment extends SupportMapFragment {

public static final LatLng NurissLife = new LatLng(28.602012, 77.098750);
private SupportMapFragment supportMapFragment;

@Override
public void onActivityCreated(Bundle bundle) {
    // FragmentManager fm=getChildFragmentManager();
    supportMapFragment=SupportMapFragment.newInstance();
    //supportMapFragment=(SupportMapFragment)getChildFragmentManager
     //().findFragmentById(R.id.map_container);
    supportMapFragment.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            googleMap.addMarker(new MarkerOptions().position
         (NurissLife).title("Nuriss LifeCare"));
            googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom
         (NurissLife, 15));
            googleMap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, 
           null);
        }
    });
    super.onActivityCreated(bundle);

}
 }

片段xml

<FrameLayout 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:id="@+id/map_content"
tools:context="com.demo.stuartabhi.nurisslife.Fragment.ContactFragment">

<!-- TODO: Update blank fragment layout -->

<FrameLayout
    android:layout_width="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"
    android:layout_height="match_parent"
    android:id="@+id/map_container">

</FrameLayout>

</FrameLayout>'

标记无效(确切位置未显示),仅显示世界地图 在Fragement中可见

OnMapReady无法显示 日志中没有错误,OnMapReady方法中描述了位置代码。

请帮助解决此问题,如何在SupportMapFragment内访问描述的位置LatLng NurissLife。

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果扩展SupportMapFragment,则无需对任何xml布局进行扩充。只需致电this.getMapAsync()以获取对Google地图的引用:

public class CustomMapFragment extends SupportMapFragment implements
        OnMapReadyCallback {

    private GoogleMap mMap;

    public CustomMapFragment() {
    }

    @Override
    public void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }

    private void setUpMapIfNeeded() {
        if (mMap == null) {
            getMapAsync(this);
        }
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        Log.d("MyMap", "onMapReady");
        mMap = googleMap;
        mMap.addMarker(new MarkerOptions().position(NurissLife).title("Nuriss LifeCare"));
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(NurissLife, 15));
        mMap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
    }
}

答案 1 :(得分:0)

试试这个:

getCustomMapFragment()类中创建方法Activity,如下所示:

private SupportMapFragment getCustomMapFragment(){
    SupportMapFragment supportMapFragment;
    supportMapFragment= SupportMapFragment.newInstance();
    supportMapFragment.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            googleMap.addMarker(new MarkerOptions().position
                    (NurissLife).title("Nuriss LifeCare"));
            googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom
                    (NurissLife, 15));
            googleMap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000,
                    null);
        }
    });
    return supportMapFragment;
}

当您执行FragmentTransaction时,请尝试以下操作:

...
transaction=getChildFragmentManager().beginTransaction();
transaction.add(R.id.map_container,getCustomMapFragment()).commit();
...

此外,通过此实现,XML中的class="com.google.android.gms.maps.SupportMapFragment"行可能是不必要的。