2016-11-02 1 views
0

배열에서 내 firebase에서 문자열을 수신 중입니다. 토스트 메시지에서 모든 것이 잘 작동합니다. 하지만 나는 정보를 마커에 표시하고 싶다. 문제는 배열에서 마커에 마지막 정보 만 수신한다는 것입니다. 따라서 모든 마커는 동일한 정보를 갖습니다. 누군가가 내가 어떻게이 문제를 해결할 수 있는지 알고있다. 나는 이미 해결책을 찾아 보았지만 메신저를 붙잡고있다.Android 마커 infowindow는 배열에서 동일한 정보를 표시합니다.

final DatabaseReference getlats = FirebaseDatabase.getInstance().getReference().child("Events"); 
getlats.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
    final Map<String, String> value = (Map<String, String>)dataSnapshot.getValue(); 
    String getslat = value.get("latitude"); 
    String getslong = value.get("longitude"); 

    final String Img = value.get("EventImg"); 
    final String Titel = value.get("Title"); 
    final String Beschreibung = value.get("Desc"); 
    final String Datum = value.get("Datum"); 
    final String Uhrzeit = value.get("Uhrzeit"); 

    double getlat = Double.parseDouble(getslat); 
    double getlong = Double.parseDouble(getslong); 

    mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 
     @Override 
     public View getInfoWindow(Marker marker) { 
     View v = getLayoutInflater().inflate(R.layout.marker_layout, null); 
     ImageView EventImg = (ImageView)v.findViewById(R.id.eventimg); 
     TextView EventTitel = (TextView)v.findViewById(R.id.eventtitel); 
     TextView EventDesc = (TextView)v.findViewById(R.id.eventdescr); 
     TextView EventDatum = (TextView)v.findViewById(R.id.eventdatum); 
     TextView EventUhrzeit = (TextView)v.findViewById(R.id.eventuhrzeit); 
     EventTitel.setText(Titel); 
     EventDesc.setText(Beschreibung); 
     EventDatum.setText(Datum); 
     EventUhrzeit.setText(Uhrzeit); 
     Picasso.with(KarteFire.this).load(Img).resize(54, 54).into(EventImg); 
     return v; 
     } 
     @Override 
     public View getInfoContents(Marker marker) { 
     return null; 
     } 
    }); 
    EventMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(getlat, getlong))); 
    } 
    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
    } 
    @Override 
    public void onChildRemoved(DataSnapshot dataSnapshot) { 
    } 
    @Override 
    public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) { 
    } 
}); 

답변

0

우리의 코드 변화의 종류 다음 확인하십시오,

final DatabaseReference getlats = FirebaseDatabase.getInstance().getReference().child("Events"); 
getlats.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
    final Map<String, String> value = (Map<String, String>)dataSnapshot.getValue(); 
String getslat = value.get("latitude"); 
String getslong = value.get("longitude"); 


double getlat = Double.parseDouble(getslat); 
double getlong = Double.parseDouble(getslong); 

mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 
    @Override 
    public View getInfoWindow(Marker marker) { 
final Map<String, String> value = (Map<String, String>)marker.getTag(); 
final String Img = value.get("EventImg"); 
final String Titel = value.get("Title"); 
final String Beschreibung = value.get("Desc"); 
final String Datum = value.get("Datum"); 
final String Uhrzeit = value.get("Uhrzeit"); 

    View v = getLayoutInflater().inflate(R.layout.marker_layout, null); 
    ImageView EventImg = (ImageView)v.findViewById(R.id.eventimg); 
    TextView EventTitel = (TextView)v.findViewById(R.id.eventtitel); 
    TextView EventDesc = (TextView)v.findViewById(R.id.eventdescr); 
    TextView EventDatum = (TextView)v.findViewById(R.id.eventdatum); 
    TextView EventUhrzeit = (TextView)v.findViewById(R.id.eventuhrzeit); 
    EventTitel.setText(Titel); 
    EventDesc.setText(Beschreibung); 
    EventDatum.setText(Datum); 
    EventUhrzeit.setText(Uhrzeit); 
    Picasso.with(KarteFire.this).load(Img).resize(54, 54).into(EventImg); 
    return v; 
    } 
    @Override 
    public View getInfoContents(Marker marker) { 
    return null; 
    } 
}); 
EventMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(getlat, getlong))); 
EventMarker.setTag(value); 
    } 
    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
    } 
    @Override 
    public void onChildRemoved(DataSnapshot dataSnapshot) { 
    } 
    @Override 
    public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) { 
    } 
}); 
+0

마커를지도에 설정되어있는 라인에 오류가 있습니다. 코드 setTag (value)를 삭제합니다. 하지만 마커를 클릭하면 추락했습니다 –

+0

Markeroptions .setTitle (Titel)에서 문자열 제목을 설정하면 작동하지만 xml trough onInfoWindow 메소드로 설정하려는 경우 작동하지 않습니다 –

+0

사용할 때 오류가 무엇입니까? setTag (value), 아마도 내가 대답을 편집했습니다. 한번 봐주세요. –