刷新/重新加载谷歌地图API v2

时间:2014-01-16 12:17:14

标签: android google-maps android-fragments android-maps-v2

在我的Android应用程序中,我使用Google Maps API v2和导航抽屉来访问各种类别,如文化,美食,......

默认情况下,地图加载所有项目,但如果我选择一个类别,我希望地图升级。

我试图从我的mainactivity调用一个片段方法,但是我创建了片段dinamically并且我无法访问“findFragmentById”。这是我的代码:

MapaFragment.java(地图片段)

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        if (container != null) {
            container.removeAllViews();
        }

        rootView = inflater.inflate(R.layout.fragment_mapa, container, false);
        listaLugares = ((ListaLugares)getActivity().getApplicationContext());

        // obtengo el mapa       
        mapa = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

        // Move the camera instantly to my position with a zoom of 15.
        LatLng miPosicion = new LatLng(main.obtLatitud, main.obtLongitud);
        mapa.moveCamera(CameraUpdateFactory.newLatLngZoom(miPosicion , 14) );

        // Zoom in, animating the camera.
        mapa.animateCamera(CameraUpdateFactory.zoomTo(14), 2000, null);

        // Add marker to the map
        addItemsToMap();


        return rootView;

    }

    public void addItemsToMap() {
        mapa.clear();
        if (listaLugares.lista.isEmpty()) {
            listaLugares.readPlaces(5000, 0, listaLugares.idCategoria);
        }

        LatLng miPosicion = new LatLng(main.obtLatitud, main.obtLongitud);
        mapa.addMarker(new MarkerOptions()
            .position(miPosicion)
            .title("Mi posición")
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.location_icon)));

        for (int i = 0; i < listaLugares.lista.size(); i++) {

            LatLng posItem = new LatLng(listaLugares.lista.get(i).latitud,listaLugares.lista.get(i).longitud);

            mapa.addMarker(new MarkerOptions()
                .position(posItem)
                .title(listaLugares.lista.get(i).nombre)
                .snippet(listaLugares.lista.get(i).descripcion)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
            Log.v("MAPA", "Marker " + i + ": " + listaLugares.lista.get(i).nombre);
        }
    }

fragment_mapa.xml(包含地图的片段布局)

<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"
    tools:context=".MainActivity" >

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

</RelativeLayout>

注意: MainActivity.java 中,我创建了导航抽屉,当我选择一个项目时,它应该刷新地图。

1 个答案:

答案 0 :(得分:2)

使用其他签名更改addItemsToMap()方法,以将抽屉的选定位置作为该方法的参数传递。所以你将拥有:

public void addItemsToMap(int position) {
    switch(position) {
            case 0 : // show all

                    break;
            case 1 : // show markers of menu 1

                    break;
            case 2 : // show markers of menu 2

                    break;
            /* etc ... */
    }        
}

现在使用onCreateView()方法,致电addItemsToMap(0)以显示您的所有标记