2016-11-02 3 views
0

Im, получая строки из моей базы бит в массиве. В сообщении Toast все работает нормально. Но я хочу отображать информацию в маркеры. Проблема в том, что я получаю только последние данные из своего массива в маркер. Таким образом, все маркеры имеют одинаковую информацию. Кто-нибудь знает, как я могу справиться с этим правильно, я уже искал какое-то разрешение, но я застрял.Индекс Android-маркера показывает ту же информацию из массива

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 (значение). Но он разбился, когда я нажимаю на маркер –

+0

Если я устанавливаю String Titel в Markeroptions .setTitle (Titel), он работает, но если я хочу установить его с помощью метода onInfoWindow xml, он не работает –

+0

Какая ошибка при использовании setTag (значение), возможно, я отредактировал ответ. Пожалуйста, смотрите. –