@Override
  public void onLoadFinished(
      Loader<ArrayList<RecipientsListLoader.Result>> loader,
      ArrayList<RecipientsListLoader.Result> data) {
    // We have an old list, get rid of it before we start again
    if (mListAdapter != null) {
      mListAdapter.notifyDataSetInvalidated();
      unbindListItems();
    }

    // Hide the progress indicator
    mProgressSpinner.setVisibility(View.GONE);

    // Create and set the list adapter
    mListAdapter = new SelectRecipientsListAdapter(this, data, mCheckedPhoneNumbers);

    if (getIntent() != null) {
      String[] initialRecipients = getIntent().getStringArrayExtra(EXTRA_RECIPIENTS);
      if (initialRecipients != null && mMode == MODE_DEFAULT) {
        for (String recipient : initialRecipients) {
          addPhoneNumberToSelectionList(data, recipient);
        }
        invalidateOptionsMenu();
      }
      setIntent(null);
    } else {
      // loader was re-triggered, retain previous selection list
      HashSet<PhoneNumber> selectedNumbers = mCheckedPhoneNumbers;
      mCheckedPhoneNumbers = new HashSet<PhoneNumber>();
      for (PhoneNumber number : selectedNumbers) {
        addPhoneNumberToSelectionList(data, number);
      }
    }

    if (mListAdapter == null) {
      // We have no numbers to show, indicate it
      TextView emptyText = (TextView) getListView().getEmptyView();
      emptyText.setText(mMobileOnly ? R.string.no_recipients_mobile_only : R.string.no_recipients);
    } else {
      setListAdapter(mListAdapter);
      getListView().setRecyclerListener(mListAdapter);
    }
  }
 @Override
 public void onLoaderReset(Loader<ArrayList<RecipientsListLoader.Result>> data) {
   mListAdapter.notifyDataSetInvalidated();
 }