private void StartAssessment(int startPosition = -1)
        {
            preambleContainer.Visibility =
                (Resources.Configuration.Orientation == Android.Content.Res.Orientation.Landscape)
                    ? ViewStates.Invisible
                    : ViewStates.Gone;
            recButton.Visibility = ViewStates.Visible;
            helpButton.Visibility = ViewStates.Visible;

            currentStage = AssessmentStage.Running;

            if (startPosition >= 0)
            {
                currentFragment = FragmentManager.FindFragmentByTag<AssessmentFragment>("ASSESSMENT_TASK");
                currentFragment.GoToStage(startPosition);
            }
            else
            {
                SetNewFragment();
                FragmentManager.BeginTransaction()
                    .Add(Resource.Id.fragment_container, currentFragment, "ASSESSMENT_TASK")
                    .Commit();
            }

            fragmentContainer.Visibility = ViewStates.Visible;

            // If the device was rotated, the fragment might already exist and the data will be ready
            if (currentFragment.finishedCreating)
            {
                assessmentType.Text = currentFragment.GetTitle();
            }
            // Otherwise, the fragment's data is currently waiting to be unbundled and so actions should be queued
            else
            {
                currentFragment.runOnceCreated.Push(
                    delegate { RunOnUiThread(() => { assessmentType.Text = currentFragment.GetTitle(); }); });
            }

            recButton.Text = "Record";
        }