diff --git a/src/main/java/de/dennisguse/opentracks/adapters/IntervalStatisticsAdapter.java b/src/main/java/de/dennisguse/opentracks/adapters/IntervalStatisticsAdapter.java index 8ca29b1a1..6b5c1290b 100644 --- a/src/main/java/de/dennisguse/opentracks/adapters/IntervalStatisticsAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/adapters/IntervalStatisticsAdapter.java @@ -20,18 +20,21 @@ import de.dennisguse.opentracks.viewmodels.IntervalStatistics; public class IntervalStatisticsAdapter extends ArrayAdapter { + private StackMode stackMode; private boolean metricUnits; - private float sumDistance_m = 0f; + private float sumDistance_m; - public IntervalStatisticsAdapter(Context context, List intervalList) { + public IntervalStatisticsAdapter(Context context, List intervalList, StackMode stackMode) { super(context, R.layout.interval_stats_list_item, intervalList); metricUnits = PreferencesUtils.isMetricUnits(context); + this.stackMode = stackMode; } @NonNull @Override public View getView(int position, @Nullable View intervalView, @NonNull ViewGroup parent) { - IntervalStatistics.Interval interval = getItem(position); + int actualPosition = stackMode == StackMode.STACK_FROM_TOP ? position : getCount() - 1 - position; + IntervalStatistics.Interval interval = getItem(actualPosition); ViewHolder viewHolder; if (intervalView == null) { @@ -48,7 +51,11 @@ public class IntervalStatisticsAdapter extends ArrayAdapter 0 ? (position * getItem(position - 1).getDistance_m()) + interval.getDistance_m() : (position + 1) * interval.getDistance_m(); + if (actualPosition + 1 == getCount() && actualPosition > 0) { + sumDistance_m = actualPosition * getItem(actualPosition - 1).getDistance_m() + interval.getDistance_m(); + } else { + sumDistance_m = (actualPosition + 1) * interval.getDistance_m(); + } viewHolder.distance.setText(StringUtils.formatDistance(getContext(), sumDistance_m, metricUnits)); Pair speedParts = StringUtils.getSpeedParts(getContext(), interval.getSpeed_ms(), metricUnits, true); @@ -60,6 +67,14 @@ public class IntervalStatisticsAdapter extends ArrayAdapter liveData = viewModel.getIntervalStats(trackId, selectedInterval); liveData.observe(getActivity(), intervalStatistics -> { if (intervalStatistics != null) { - adapter = new IntervalStatisticsAdapter(getContext(), intervalStatistics.getIntervalList()); + adapter = new IntervalStatisticsAdapter(getContext(), intervalStatistics.getIntervalList(), stackModeListView); intervalListView.setAdapter(adapter); } }); @@ -179,10 +182,10 @@ public class IntervalsFragment extends Fragment { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); ((TrackRecordingActivity) getActivity()).setTrackIdListener(this); intervalHandler = new Handler(); - - super.onViewCreated(view, savedInstanceState); + stackModeListView = IntervalStatisticsAdapter.StackMode.STACK_FROM_BOTTOM; } @Override diff --git a/src/main/res/layout/interval_list_view.xml b/src/main/res/layout/interval_list_view.xml index df0b45af0..84e0bbdf1 100644 --- a/src/main/res/layout/interval_list_view.xml +++ b/src/main/res/layout/interval_list_view.xml @@ -89,7 +89,7 @@