现在我知道如何创建地图并进行管理。我可以在我的数据库中找到信息(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);
}
}
答案 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++;
}
}
}