@Override
  public void onDetach() {
    super.onDetach();
    mCallbacks = null;

    mWizardModel.unregisterListener(this);
  }
  @Override
  public void onAttach(Activity activity) {
    super.onAttach(activity);

    if (!(activity instanceof Callbacks)) {
      throw new ClassCastException("Activity must implement fragment's callbacks");
    }

    mCallbacks = (Callbacks) activity;

    mWizardModel = mCallbacks.onGetModel();
    mWizardModel.registerListener(this);
    onPageTreeChanged();
  }
  @Override
  public void onPageDataChanged(Page changedPage) {
    ArrayList<ReviewItem> reviewItems = new ArrayList<ReviewItem>();
    for (Page page : mWizardModel.getCurrentPageSequence()) {
      page.getReviewItems(reviewItems);
    }
    Collections.sort(
        reviewItems,
        new Comparator<ReviewItem>() {
          @Override
          public int compare(ReviewItem a, ReviewItem b) {
            return a.getWeight() > b.getWeight() ? +1 : a.getWeight() < b.getWeight() ? -1 : 0;
          }
        });
    mCurrentReviewItems = reviewItems;

    if (mReviewAdapter != null) {
      mReviewAdapter.notifyDataSetInvalidated();
    }
  }