public void showSelection(@NonNull final List<GeoitemRef> items, final boolean longPressMode) {
        if (items.isEmpty() && !longPressMode) {
            if (sheetRemoveFragment()) {
                return;
            }
            HideActionBarUtils.toggleActionBar(this);
        }
        if (items.isEmpty()) {
            return;
        }

        if (items.size() == 1) {
            if (longPressMode) {
                if (Settings.isLongTapOnMapActivated()) {
                    triggerCacheWaypointLongTapContextMenu(items.get(0));
                }
            } else {
                showPopup(items.get(0));
            }
            return;
        }
        try {
            final ArrayList<GeoitemRef> sorted = new ArrayList<>(items);
            Collections.sort(sorted, GeoitemRef.NAME_COMPARATOR);

            final SimpleDialog.ItemSelectModel<GeoitemRef> model = new SimpleDialog.ItemSelectModel<>();
            model
                .setItems(sorted)
                .setDisplayViewMapper((item, itemGroup, ctx, view, parent) ->
                        GeoItemSelectorUtils.createGeoItemView(NewMap.this, item, GeoItemSelectorUtils.getOrCreateView(NewMap.this, view, parent)),
                        (item, itemGroup) -> item.getName() + "::" + item.getGeocode())
                .setItemPadding(0);

            SimpleDialog.of(this).setTitle(R.string.map_select_multiple_items).selectSingle(model, item -> {
                if (longPressMode) {
                    if (Settings.isLongTapOnMapActivated()) {
                        triggerCacheWaypointLongTapContextMenu(item);
                    }
                } else {
                    showPopup(item);
                }
            });

        } catch (final NotFoundException e) {
            Log.e("NewMap.showSelection", e);
        }
    }
Repaint position overlay but only with a max frequency and if position or heading changes sufficiently.
main/src/main/java/cgeo/geocaching/maps/mapsforge/v6/NewMap.java