private void setFilter(final GeocacheFilter advancedFilter, final boolean force) {

        // Backup current caches list if it isn't backed up yet
        if (originalList == null) {
            originalList = new ArrayList<>(list);
        }

        if (!force && currentGeocacheFilter == advancedFilter) {
            return;
        }
        if (!force && currentGeocacheFilter != null && advancedFilter != null && currentGeocacheFilter.toConfig().equals(advancedFilter.toConfig())) {
            return;
        }

        // If there is already a filter in place, this is a request to change or clear the filter, so we have to
        // replace the original cache list
        if (hasActiveFilter()) {
            list.clear();
            list.addAll(originalList);
        }

        currentGeocacheFilter = advancedFilter;

        performFiltering();

        notifyDataSetChanged();
    }
Apply a new filter to the adapter (e.g. after filter was changed by user in menu)
main/src/main/java/cgeo/geocaching/ui/CacheListAdapter.java