@Override
        // splitting up that method would not help improve readability
        @SuppressWarnings({"PMD.NPathComplexity", "PMD.ExcessiveMethodLength"})
        public void setContent() {
            // retrieve activity and cache - if either of them is null, something's really wrong!
            final CacheDetailActivity activity = (CacheDetailActivity) getActivity();
            if (activity == null) {
                return;
            }
            cache = activity.getCache();
            if (cache == null) {
                return;
            }
            binding.getRoot().setVisibility(View.VISIBLE);

            // Reference to the details list and favorite line, so that the helper-method can access them without an additional argument
            final CacheDetailsCreator details = new CacheDetailsCreator(activity, binding.detailsList);

            // cache name (full name), may be editable
            // Not using colored cache names at this place to have at least one place without any formatting to support visually impaired users
            final TextView cachename = details.add(R.string.cache_name, cache.getName()).valueView;
            details.addShareAction(cachename);
            if (cache.supportsNamechange()) {
                cachename.setOnClickListener(v -> Dialogs.input(activity, activity.getString(R.string.cache_name_set), cache.getName(), activity.getString(R.string.caches_sort_name), name -> {
                    cachename.setText(name);
                    cache.setName(name);
                    CacheDetailActivity.saveAndNotify(getContext(), cache, LoadFlags.SAVE_ALL);
                    ViewUtils.showShortToast(activity, R.string.cache_name_updated);
                }));
            }

            details.add(R.string.cache_type, cache.getType().getL10n());
            if (cache.getType() == CacheType.ADVLAB) {
                details.addAlcMode(cache);
            }
            details.addSize(cache);
            details.addShareAction(details.add(R.string.cache_geocode, cache.getShortGeocode()).valueView);
            details.addCacheState(cache);

            activity.cacheDistanceView = details.addDistance(cache, activity.cacheDistanceView);

            details.addDifficulty(cache);
            details.addTerrain(cache);
            details.addRating(cache);

            // favorite count
            favoriteLine = details.add(R.string.cache_favorite, "");

            details.addBetterCacher(cache);

            // own rating
            if (cache.getMyVote() > 0) {
                details.addStars(R.string.cache_own_rating, cache.getMyVote());
            }

            // cache author
            if (StringUtils.isNotBlank(cache.getOwnerDisplayName()) || StringUtils.isNotBlank(cache.getOwnerUserId())) {
                final TextView ownerView = details.add(R.string.cache_owner, "").valueView;
                if (StringUtils.isNotBlank(cache.getOwnerDisplayName())) {
                    ownerView.setText(cache.getOwnerDisplayName(), TextView.BufferType.SPANNABLE);
                } else { // OwnerReal guaranteed to be not blank based on above
                    ownerView.setText(cache.getOwnerUserId(), TextView.BufferType.SPANNABLE);
                }
                ownerView.setOnClickListener(UserClickListener.forOwnerOf(cache));
            }

            // hidden or event date
            final TextView hiddenView = details.addHiddenDate(cache);
            if (hiddenView != null) {
                details.addShareAction(hiddenView);
                if (cache.isEventCache()) {
                    hiddenView.setOnClickListener(v -> CalendarUtils.openCalendar(activity, cache.getHiddenDate()));
                }
            }

            // cache location
            if (StringUtils.isNotBlank(cache.getLocation())) {
                details.add(R.string.cache_location, cache.getLocation());
            }

            // cache coordinates
            details.addCoordinates(cache.getCoords());

            // Latest logs
            details.addLatestLogs(cache);

            // cache attributes
            updateAttributes(activity);
            binding.attributesBox.setVisibility(cache.getAttributes().isEmpty() ? View.GONE : View.VISIBLE);

            updateOfflineBox(binding.getRoot(), cache, activity.res, new RefreshCacheClickListener(), new DropCacheClickListener(),
                    new StoreCacheClickListener(), null, new MoveCacheClickListener(), new StoreCacheClickListener());

            // list
            updateCacheLists(binding.getRoot(), cache, activity.res, activity);

            // watchlist

            binding.addToWatchlist.setOnClickListener(new AddToWatchlistClickListener());
            binding.removeFromWatchlist.setOnClickListener(new RemoveFromWatchlistClickListener());
            updateWatchlistBox(activity);

            // internal WIG player, WhereYouGo, ChirpWolf, Adventure Lab
            updateWherigoBox(activity);
            updateWhereYouGoBox(activity);
            updateChirpWolfBox(activity);
            updateALCBox(activity);

            // favorite points
            binding.addToFavpoint.setOnClickListener(new FavoriteAddClickListener());
            binding.removeFromFavpoint.setOnClickListener(new FavoriteRemoveClickListener());
            updateFavPointBox(activity);

            // data license
            final IConnector connector = ConnectorFactory.getConnector(cache);
            final String license = connector.getLicenseText(cache);
            if (StringUtils.isNotBlank(license)) {
                binding.licenseBox.setVisibility(View.VISIBLE);
                binding.license.setText(HtmlCompat.fromHtml(license, HtmlCompat.FROM_HTML_MODE_LEGACY), BufferType.SPANNABLE);
                binding.license.setClickable(true);
                binding.license.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance());
            } else {
                binding.licenseBox.findViewById(R.id.license_box).setVisibility(View.GONE);
            }
        }
Creator for details-view.
<br>
TODO: Extract inner class to own file for a better overview. Same might apply to all other view creators.
main/src/main/java/cgeo/geocaching/CacheDetailActivity.java