如何在 RecyclerView 项目更改时触发 MainActivity 地图修改

How to trigger MainActivity map modifications on RecyclerView items change

我有一个在地图上显示项目的 RecyclerView。其中一些项目有位置,我想在地图上为它们设置标记。一旦用户滚动并且该项目不再可见,我将删除标记,然后在可能的情况下添加新标记。

这是我的地图片段初始化:

mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);

        mapFragment.getMapAsync(this);

我在这里初始化地图:

 @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
    }

可以这样添加标记:

LatLng sydney = new LatLng(-33.852, 151.211);
googleMap.addMarker(new MarkerOptions().position(sydney)
   .title("Marker in Sydney"));

我这是获取第一个和最后一个可见项的方法:

LinearLayoutManagerlayoutManager = ((LinearLayoutManager)mRecyclerView.getLayoutManager());
int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
int lastVisiblePosition = layoutManager.findLastVisibleItemPosition();

并基于此我将控制显示哪些标记。

不幸的是,我不知道在哪里 link 所有这些都在一起。有人有什么想法吗?

无法完全评估您的问题。但如果它属于这些情况。

  1. 地图和回收视图都在同一个屏幕上,这意味着用户 可以同时看到列表和地图
  2. List 和 Map 是两个不同的部分,以两种不同的方式显示 fragment 或 activities.That 意味着用户可以看到地图 或一次列表。

情况 1) 如果是第一种情况。 - 每次使用 addOnScrollListener 获取更新的位置 滚动列表

 mRecyclverViewEvent.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override


     public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
            lastVisiblePosition = layoutManager.findLastVisibleItemPosition();
            updateMapMarker();
        }
    })
  • 创建一个 updateMapMarker() 方法,删除旧标记并使用第一个和最后一个可见项目位置在 map.First 上绘制新标记,最后一个可见项目位置将允许您获得开始位置和从主项目列表结束。