2016-05-10 7 views
-2

Я хотел бы знать, как добавить один маркер в разные списки массивов. Я скажу 5 списков массивов и 7 маркеров. Я добавляю маркеры на карту, добавляя каждый маркер в соответствующий список и фильтр, чтобы отображать или скрывать маркеры в соответствии с выбранным пользователем списком. Все работает нормально, когда списки содержат разные маркеры, но когда у меня есть общие маркеры в двух списках, общий маркер будет храниться только в последнем добавленном списке.Могу ли я добавить один и тот же маркер в разные ArrayLists?

List<Marker> firstList = new ArrayList<>(); 
List<Marker> secondList= new ArrayList<>(); 
List<Marker> thirdList= new ArrayList<>(); 
List<Marker> fourthList= new ArrayList<>(); 
List<Marker> fifthList= new ArrayList<>(); 

Marker marker1 = mMap.addMarker(new MarkerOptions().position(latLong1).title("MARKER1").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker1")); 
Marker marker2 = mMap.addMarker(new MarkerOptions().position(latLong2).title("MARKER2").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker2")); 
Marker marker3 = mMap.addMarker(new MarkerOptions().position(latLong3).title("MARKER3").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker3")); 
Marker marker4 = mMap.addMarker(new MarkerOptions().position(latLong4).title("MARKER4").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker4")); 
Marker marker5 = mMap.addMarker(new MarkerOptions().position(latLong5).title("MARKER5").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker5")); 
Marker marker6 = mMap.addMarker(new MarkerOptions().position(latLong6).title("MARKER6").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker6")); 
Marker marker7 = mMap.addMarker(new MarkerOptions().position(latLong7).title("MARKER7").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker7")); 

firstList.add(marker1); 
secondList.add(marker2); 
secondList.add(marker3); 
thirdList.add(marker1); 
thirdList.add(marker4); 
fourthList.add(marker5); 
fifthList.add(marker6); 
fifthList.add(marker7); 
fifthList.add(marker1); 
fifthList.add(marker2); 

Так что, когда я фильтровать маркеры по спискам, например, если я фильтр для firstList ни одного маркера не будет отображаться, если фильтр для thirdList будет отображаться только marker4 и если фильтр для fifthList, чем аль маркеры будут отображение включая маркер1. Таким образом, список содержит только последние добавленные общие элементы. Итак, как я могу сделать так, чтобы списки сохраняли все свои объекты, даже если они являются общими для других списков?

Заранее благодарен!

UPDATE:

Я не знаю, если это именно то, что вы предложили, но я сделал это и теперь фильтр работает правильно. Делая это, у меня есть еще одна проблема.

List<Marker> firstList = new ArrayList<>(); 
List<Marker> secondList= new ArrayList<>(); 
List<Marker> thirdList= new ArrayList<>(); 
List<Marker> fourthList= new ArrayList<>(); 
List<Marker> fifthList= new ArrayList<>(); 

firstList.add(mMap.addMarker(new MarkerOptions().position(latLong1).title("MARKER1").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker1"))); 
secondList.add(mMap.addMarker(new MarkerOptions().position(latLong2).title("MARKER2").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker2"))); 
secondList.add(mMap.addMarker(new MarkerOptions().position(latLong3).title("MARKER3").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker3"))); 
thirdList.add(mMap.addMarker(new MarkerOptions().position(latLong1).title("MARKER1").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker1"))); 
thirdList.add(mMap.addMarker(new MarkerOptions().position(latLong4).title("MARKER4").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker4"))); 
fourthList.add(mMap.addMarker(new MarkerOptions().position(latLong5).title("MARKER5").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker5"))); 
fifthList.add(mMap.addMarker(new MarkerOptions().position(latLong6).title("MARKER6").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker6"))); 
fifthList.add(mMap.addMarker(new MarkerOptions().position(latLong7).title("MARKER7").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker7"))); 
fifthList.add(mMap.addMarker(new MarkerOptions().position(latLong1).title("MARKER1").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker1"))); 
fifthList.add(mMap.addMarker(new MarkerOptions().position(latLong2).title("MARKER2").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)).snippet("Snippet marker2"))); 

Теперь я хочу добавить OnInfoWindowClickListener в информационное окно моих маркеров. Каждый маркер должен открыть новое действие. Перед выполнением этой модификации я добавлял все маркеры в приватную карту allMarkersMap = new HashMap(); и я добавлял каждый маркер в HashMap с allMarkersMap.put (marker1, Marker1.class);

GoogleMap.OnInfoWindowClickListener MyOnInfoWindowClickListener = new GoogleMap.OnInfoWindowClickListener() { 
    @Override 
    public void onInfoWindowClick(Marker marker) { 
     Class cls = allMarkersMap.get(marker); 
     Intent intent = new Intent(MainActivity.this, cls); 
     startActivity(intent); 
    } 
}; 

Как это сделать сейчас?

ответ

0

В ваших маркерах есть те же ссылки, вот что ведет к такому поведению. Вместо того, чтобы создавать и передавать маркеры, вы должны создать MarkerOptions, и когда вы добавите маркер в список массивов, создайте новый Marker. MarkerOptions - это объект, который хранит информацию, необходимую для ваших маркеров, это единственный объект, который должен быть создан один раз.

+0

не могли бы вы привести пример кода? –

+0

Я обновил свой код выше. Теперь фильтр работает, но я столкнулся с другой проблемой. Посмотрите отредактированный вопрос. –