如何触发RecyclerView项目上的MainActivity地图修改更改

时间:2018-01-10 10:38:54

标签: android google-maps android-maps-v2

我有一个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();

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

不幸的是,我不知道将所有这些链接在一起的位置。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

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

  1. 地图和回收视图都在同一个屏幕上,这意味着用户 可以同时查看列表和地图。
  2. 列表和地图是两个不同的部分,并以两个不同的方式显示 片段或活动。这意味着用户可以看到地图 或一次列表。
  3. 案例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()方法,删除旧标记和用户第一个和最后一个可见项目位置以在地图上绘制新标记。第一个和最后一个可见项目位置将允许您获得开始和结束的位置主要项目清单。