【问题标题】:Can I add the same marker in different ArrayLists?我可以在不同的 ArrayList 中添加相同的标记吗?
【发布时间】:2016-05-10 09:21:44
【问题描述】:

我想知道如何将相同的标记添加到不同的数组列表中。我假设有 5 个数组列表和 7 个标记。我正在将标记添加到地图中,将每个标记添加到它的相应列表中,并根据用户选择的列表进行过滤以显示或隐藏标记。当列表包含不同的标记时一切正常,但是当我在两个列表中有公共标记时,公共标记将仅保留在添加的最后一个列表中。

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,则会显示所有标记,包括 marker1。所以列表只保留最后添加的常见项目。那么我怎样才能使列表保留所有对象,即使它们对其他列表是通用的呢?

提前致谢!

更新:

我不知道这是否正是您建议的,但我这样做了,现在过滤器工作正常。这样做我还有另一个问题。

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 添加到我的标记信息窗口。每个标记必须打开一个新活动。在进行此修改之前,我将所有标记添加到私有 Map allMarkersMap = new HashMap();我正在使用 allMarkersMap.put(marker1, Marker1.class); 将每个标记添加到 HashMap;

 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);
    }
};

我现在该怎么做?

【问题讨论】:

    标签: android list google-maps marker


    【解决方案1】:

    您的标记具有相同的引用,这就是导致您出现这种行为的原因。 您应该创建MarkerOptions,而不是创建和传递标记,当您向数组列表添加标记时,然后创建一个新的MarkerMarkerOptions 是为标记保留所需信息的对象,这是唯一应该实例化一次的对象。

    【讨论】:

    • 我已经更新了上面的代码。现在过滤器正在工作,但我遇到了另一个问题。请查看已编辑的问题。
    猜你喜欢
    • 2016-09-04
    • 2010-11-22
    • 2021-12-31
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2022-11-19
    相关资源
    最近更新 更多