/**
   * Sets the Empty View to be used by the Adapter View.
   *
   * <p>We need it handle it ourselves so that we can Pull-to-Refresh when the Empty View is shown.
   *
   * <p>Please note, you do <strong>not</strong> usually need to call this method yourself. Calling
   * setEmptyView on the AdapterView will automatically call this method and set everything up. This
   * includes when the Android Framework automatically sets the Empty View based on it's ID.
   *
   * @param newEmptyView - Empty View to be used
   */
  public final void setEmptyView(View newEmptyView) {
    FrameLayout refreshableViewWrapper = getRefreshableViewWrapper();

    if (null != newEmptyView) {
      // New view needs to be clickable so that Android recognizes it as a
      // target for Touch Events
      newEmptyView.setClickable(true);

      ViewParent newEmptyViewParent = newEmptyView.getParent();
      if (null != newEmptyViewParent && newEmptyViewParent instanceof ViewGroup) {
        ((ViewGroup) newEmptyViewParent).removeView(newEmptyView);
      }

      // We need to convert any LayoutParams so that it works in our
      // FrameLayout
      FrameLayout.LayoutParams lp = convertEmptyViewLayoutParams(newEmptyView.getLayoutParams());
      if (null != lp) {
        refreshableViewWrapper.addView(newEmptyView, lp);
      } else {
        refreshableViewWrapper.addView(newEmptyView);
      }
    }

    if (mRefreshableView instanceof EmptyViewMethodAccessor) {
      ((EmptyViewMethodAccessor) mRefreshableView).setEmptyViewInternal(newEmptyView);
    } else {
      mRefreshableView.setEmptyView(newEmptyView);
    }
    mEmptyView = newEmptyView;
  }
  /**
   * Sets the Empty View to be used by the Adapter View.
   *
   * <p>We need it handle it ourselves so that we can Pull-to-Refresh when the Empty View is shown.
   *
   * <p>Please note, you do <strong>not</strong> usually need to call this method yourself. Calling
   * setEmptyView on the AdapterView will automatically call this method and set everything up. This
   * includes when the Android Framework automatically sets the Empty View based on it's ID.
   *
   * @param newEmptyView - Empty View to be used
   */
  public final void setEmptyView(View newEmptyView) {
    // If we already have an Empty View, remove it
    if (null != mEmptyView) {
      mRefreshableViewHolder.removeView(mEmptyView);
    }

    if (null != newEmptyView) {
      // New view needs to be clickable so that Android recognizes it as a
      // target for Touch Events
      newEmptyView.setClickable(true);

      final ViewParent newEmptyViewParent = newEmptyView.getParent();
      if (null != newEmptyViewParent && newEmptyViewParent instanceof ViewGroup) {
        ((ViewGroup) newEmptyViewParent).removeView(newEmptyView);
      }

      mRefreshableViewHolder.addView(
          newEmptyView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

      if (mRefreshableView instanceof EmptyViewMethodAccessor) {
        ((EmptyViewMethodAccessor) mRefreshableView).setEmptyViewInternal(newEmptyView);
      } else {
        mRefreshableView.setEmptyView(newEmptyView);
      }
    }
  }