2015-07-22 3 views
1

Так что моему приложению требуется создать маршрут для определенной шины. Я выполнил это и создал пользовательское информационное окно для маркера. Теперь меня попросили добавить функцию, в которой мне нужно показать на карте POI (точки интереса) вокруг маркера. Я успешно создал это. Тем не менее, я хочу другое информационное окно для этих маркеров POI.Несколько InfoWindows Android Maps V2

Вот мое первое информационное окно:

public class InfoAdapter implements GoogleMap.InfoWindowAdapter { 
    LayoutInflater inflater = null; 
    private TextView textViewstopName; 
    private TextView arrivalTime; 
    public InfoAdapter(LayoutInflater inflater) { 
     this.inflater = inflater; 
    } 
    @Override 
    public View getInfoWindow(Marker marker) { 
     View v = inflater.inflate(R.layout.businfo_layout, null); 
     if (marker != null) { 
      textViewstopName = (TextView) v.findViewById(R.id.businfo); 
      textViewstopName.setText(marker.getTitle()); 
      arrivalTime = (TextView) v.findViewById(R.id.arrivalinfo); 
      arrivalTime.setText(marker.getSnippet()); 
     } 
     return (v); 
    } 
    @Override 
    public View getInfoContents(Marker marker) { 
     return (null); 
    } 
} 

А вот мой второй один (я хотел бы иметь теперь по умолчанию один для объектов POI для):

public class PlacesAdapter implements GoogleMap.InfoWindowAdapter{ 
    LayoutInflater inflater = null; 
    public PlacesAdapter(LayoutInflater inflater) { 
     this.inflater = inflater; 
    } 
    @Override 
    public View getInfoWindow(Marker marker) { 
     return null; 
    } 

    @Override 
    public View getInfoContents(Marker marker) { 
     return null; 
    } 
} 

Вот где я называется первым один:

private void SetupStopMarkers(){ 
    map.setInfoWindowAdapter(new InfoAdapter(getLayoutInflater())); 
    addMarkersToMap(markerPoints); 
} 

Вот где я назвал второй один:

else{ 
      map.setInfoWindowAdapter(new PlacesAdapter(getLayoutInflater())); 
    ... 
    } 

Мой info_layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" 
android:weightSum="1" 
android:background="@drawable/businfo_dialog"> 

<ImageView 
    android:id="@+id/busicon" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:src="@drawable/busstop_icon"/> 
<ImageView 
    android:id="@+id/clockicon" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:layout_below="@+id/busicon" 
    android:layout_alignParentLeft="true" 
    android:paddingLeft="5dp" 
    android:src="@drawable/clock" 
    android:paddingBottom="10dp"/> 

<TextView 
    android:id="@+id/businfo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#FFFFFFFF" 
    android:drawablePadding="10dp" 
    android:layout_centerVertical="true" 
    android:layout_toRightOf="@+id/busicon" 
    android:layout_toEndOf="@+id/busicon" 
    android:paddingRight="10dp" 
    android:paddingTop="5dp" 
    android:layout_alignParentTop="true" /> 

<TextView 
    android:id="@+id/arrivalinfo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#FFFFFFFF" 
    android:drawablePadding="10dp" 
    android:layout_centerVertical="true" 
    android:layout_below="@+id/businfo" 
    android:layout_toRightOf="@+id/clockicon" 
    android:layout_toEndOf="@+id/clockicon" 
    android:paddingRight="10dp" 
    android:paddingTop="5dp"/> 
<TextView 
    android:id="@+id/placesinfo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/arrivalinfo" 
    android:paddingTop="5dp" 
    android:paddingBottom="35dp" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    android:textColor="#0099cc" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:text="@string/more_info"/> 
<TextView 
    android:id="@+id/eta_i" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@+id/arrivalinfo" 
    android:layout_toEndOf="@+id/arrivalinfo" 
    android:paddingLeft="5dp" 
    android:paddingTop="5dp" 
    android:layout_alignTop="@+id/arrivalinfo" 
    android:text="ETA:" 
    android:textStyle="bold" 
    android:textColor="#FFFFFFFF"/> 
    </RelativeLayout> 

Но после вызова второго информационного окна, каждый маркер на карте изменения в этом втором информационном окне. Есть ли способ сделать это? Любая помощь приветствуется.

+0

Можете ли вы поделиться тем, что вы пытаетесь достичь? У вас не может быть установлено несколько InfoWindowAdapters, но вы должны иметь возможность добавить функциональность к существующему InfoWindowAdapter для достижения желаемого результата. –

+0

Спасибо, что ответили! У меня есть два разных маркера: маркер позиции и маркеры B POI. У меня есть настраиваемый infowindow для A, но я пытаюсь показать другое значение B для маркеров POI. – Masterofawesome

+0

Я думаю, что лучший способ сделать это - раздуть различные макеты в InfoWindowAdapter в зависимости от типа маркера. Можете ли вы показать свой «InfoAdapter» и макет xml? –

ответ

2

Got it. Поэтому, чтобы получить несколько окон Info, мне пришлось получить идентификаторы маркера, соответствующие маркерам. Поэтому я создал ArrayList, который принимает «id» маркера.

ArrayList<String> markerPlaces = new ArrayList<>(); 

Я тогда населен как добавить маркеры на карте:

Marker marker = map.addMarker(new MarkerOptions().position(position) 
         .title(venuesfound.get(i).getName()) 
         .snippet("\nOpen: " + venuesfound.get(i).getOpenNow() 
           + "\n(" + venuesfound.get(i).getCategory() + ")") 
         .icon(BitmapDescriptorFactory.fromResource(R.drawable.measle_blue))); 
       markerPlaces.add(marker.getId());   

Тогда на InfoAdapter, я просто добавил условие, что если маркер идентификатор находится в ArrayList, который я создал, затем наденьте другой надув.

public class InfoAdapter implements GoogleMap.InfoWindowAdapter { 
    LayoutInflater inflater = null; 
    private TextView textViewstopName; 
    private TextView arrivalTime; 
    public InfoAdapter(LayoutInflater inflater) { 
     this.inflater = inflater; 
    } 
    @Override 
    public View getInfoWindow(Marker marker) { 
     if (marker != null) { 
      if(markerPlaces.containsKey(marker.getId())) { 
      ... //Add new inflater here. 
      } //checks if the marker is part of the Position marker or POI marker. 
      else{ 
       View v = inflater.inflate(R.layout.businfo_layout, null); 
       textViewstopName = (TextView) v.findViewById(R.id.businfo); 
       textViewstopName.setText(marker.getTitle()); 
       arrivalTime = (TextView) v.findViewById(R.id.arrivalinfo); 
       arrivalTime.setText(marker.getSnippet()); 
       return (v); 
      } 
     } 
     return null; 
    } 
    @Override 
    public View getInfoContents(Marker marker) { 
     return (null); 
    } 
} 

Благодарим всех вас за помощь! Это, конечно, заставило меня задуматься!

+0

Ницца! Это то, о чем я думал, будет работать. –

Смежные вопросы