如何在 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 所有这些都在一起。有人有什么想法吗?
无法完全评估您的问题。但如果它属于这些情况。
- 地图和回收视图都在同一个屏幕上,这意味着用户
可以同时看到列表和地图
- 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 上绘制新标记,最后一个可见项目位置将允许您获得开始位置和从主项目列表结束。
我有一个在地图上显示项目的 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 所有这些都在一起。有人有什么想法吗?
无法完全评估您的问题。但如果它属于这些情况。
- 地图和回收视图都在同一个屏幕上,这意味着用户 可以同时看到列表和地图
- 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 上绘制新标记,最后一个可见项目位置将允许您获得开始位置和从主项目列表结束。