向地图添加标记

时间:2018-02-09 09:55:18

标签: java android google-maps

现在我知道如何创建地图并进行管理。我可以在我的数据库中找到信息(Retrofit和PHP API)。

我想在地图中添加标记。为此,我请求我的数据库,在通过Retrofit后,我检索一个“Marker”对象列表,其中包含目前有两个基本数据:经度和纬度。此列表在我的MainActivity中创建。

问题是我不知道如何在管理地图的班级中传递此列表。 目前我尝试创建一个传递值表的Setter。问题是要生成标记,我只能在我的OnMapReady()中执行。但现在还为时过早。当我输入onMapReady()时,我的列表尚未设置......

基本上我想知道如何在onMapReady()之后添加标记?

我的MainActivity.java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("API_Test", "Message test");

        //BDD
        bddRequest githubService = new RestAdapter.Builder()
                .setEndpoint(bddRequest.ENDPOINT)
                .build()
                .create(bddRequest.class);
        githubService.listMarqueurs("API_REST",new Callback<List<Marqueur>>() {
            @Override
            public void success(List<Marqueur> marqueur, Response response) {
                DisplayRepos(marqueur);

                int i = 0;
                while(i<marqueur.size())`enter code here`
                {
                    Log.e(String.valueOf(i), String.valueOf(marqueur.get(i).getLong()));
                    i++;
                }

                MapsFragment mapInitial = new MapsFragment(marqueur);
            }

            @Override
            public void failure(RetrofitError error) {
                Log.e("API_Test","ERROR ! ");
            }
        });
    }

    public void DisplayRepos(List<Marqueur> marqueur) {
        Log.e("nombre de dépots : ", String.valueOf(+marqueur.size()));
    }
}

我的MapsFragment.java:

public class MapsFragment extends Fragment implements OnMapReadyCallback
    {
        private List<Marqueur> tousLesMarqueurs;

        public MapsFragment() { }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            //return inflater.inflate(R.layout.fragment_maps, container, false);
            final View rootView = inflater.inflate(R.layout.fragment_maps, container, false);
            final SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);
            return rootView;
        }

        @Override
        public void onMapReady(GoogleMap googleMap)
        {
            googleMap.addMarker(new MarkerOptions().position(new LatLng(48.8534100, 2.3488000)).title("Paris").snippet("is beautiful !"));

            /*int i = 0;
            while(i<tousLesMarqueurs.size())
            {
                Log.e(String.valueOf(i), String.valueOf(tousLesMarqueurs.get(i).getLong()));
                googleMap.addMarker(new MarkerOptions().position(new LatLng(tousLesMarqueurs.get(i).getLati(), tousLesMarqueurs.get(i).getLong())));
                i++;
            }*/

        }

        @Override
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
        {
            super.onViewCreated(view, savedInstanceState);
        }
    }

1 个答案:

答案 0 :(得分:1)

在您的MapsFragment中,创建一个属性Map myMap。并在onMapReady()中设置它。 然后在你的setter中创建标记。

public class MapsFragment extends Fragment implements OnMapReadyCallback
{

    private List<Marqueur> tousLesMarqueurs;
    private GoogleMap myMap;

    ...

    @Override
    public void onMapReady(GoogleMap googleMap)
    {
        myMap = googleMap;

    }

    public void setMarkers( List<Marqueur> markers){
       tousLesMarqueurs = markers;
       int i = 0;
          while(i<tousLesMarqueurs.size())
          {
              myMap.addMarker(new MarkerOptions().position(new LatLng(tousLesMarqueurs.get(i).getLati(), tousLesMarqueurs.get(i).getLong())));
              i++;
          }
    }
}