Hey Stackoverflow-Community,senden Argument Fragment in einem Zuhörer in einer Schleife
ich auf einem Android-App für ein akademisches Projekt arbeite, das Ziel Daten ist eine API zum Abrufen verwenden und es auf einer Karte angezeigt werden Markern .
Ich möchte einige Details in einem Fragment anzeigen, wenn der Benutzer auf den Marker klickt. Ich benutze beginTransaction und setArguments, um dies zu tun, und es funktioniert für einen Marker. Mein Problem ist, dass meine Marker in einer for-Schleife erstellt werden und ich nur die Argumente aus der letzten Iteration der Schleife abrufen kann. Hier
ist die Schleife in meinem mainActivity:
JSONObject jsonObject = new JSONObject(res);
JSONArray results = jsonObject.getJSONArray("results");
for (int i = 0; i < results.length(); i++) {
String name = placeList.get(i).getName();
double lat = placeList.get(i).getLat();
double lng = placeList.get(i).getLng();
map.addMarker(new MarkerOptions()
.position(new LatLng(lat, lng))
.title());
// CustomOnMarkerClickListener(place) implements GoogleMap.OnMarkerClickListener
map.setOnMarkerClickListener(new CustomOnMarkerClickListener(place));
}
Hier ist meine Gewohnheit OnMarkerClickListener
public class CustomOnMarkerClickListener implements GoogleMap.OnMarkerClickListener {
JSONObject place;
public CustomOnMarkerClickListener(JSONObject place) {
this.place = place;
}
@Override
public boolean onMarkerClick(Marker marker) {
InfoPanelActivity ipa = new InfoPanelActivity();
FragmentManager fm = getSupportFragmentManager();
Bundle args = new Bundle();
args.putString("place", place.toString());
ipa.setArguments(args);
if(findViewById(R.id.textView2) == null) {
fm.beginTransaction()
.add(R.id.info_panel_frame, ipa)
.commit();
} else {
fm.beginTransaction()
.replace(R.id.info_panel_frame, ipa)
.commit();
}
return false;
}
}
Und hier ist, wie ich das Argument in meinem Fragment
Bundle args = getArguments();
String name = args.getString("place");
TextView tv = (TextView) getView().findViewById(R.id.textView2);
tv.setText("test: " + name);
ich Ich habe wirklich geschätzt, wenn Sie mir helfen könnten, ich sehe wirklich nicht, wie ich dieses Problem lösen kann.
Dank
Da es nur ein 'OnMarkerClickListener' auf der Karte festgelegt werden kann, benötigen Sie eine Möglichkeit zum Nachschlagen die Information über eine Markierung innerhalb Ihres Zuhörers stattdessen. Dies deutet darauf hin, dass Sie eine Methode zum Kennzeichnen eines Markers mit einem Index in JSONArray benötigen, sodass Sie beim Klicken darauf die Daten abrufen können. Wenn ich das Javadoc für "MarkerOptions" ansehe, sehe ich nichts, an das man irgendwelche benutzerdefinierten Daten anhängen könnte (dasselbe gilt für das 'Marker' -Objekt, das von' addMarker() 'zurückgegeben wurde), was mich ein wenig ratlos macht und mich dazu bringt wundern Sie sich, warum Google keine Affordance für dieses ... – Karakuri
Scheint, wie die Lösung ist, Ihre eigene Datenstruktur zu verwenden, um den "Markierung" zurückzugeben, der von 'addMarker()' zu irgendwelchen Daten zurückgegeben wird, die Sie haben. Dieser Beitrag beschreibt einen solchen Ansatz: http://StackOverflow.com/a/13902666/1207921 – Karakuri