protected final void showError(String msg) {
        hideLoading();
        if (tvError == null) {
            tvError = new TextView(getContext());
            tvError.setGravity(Gravity.CENTER);
            tvError.setTextSize(16);
            tvError.setTextColor(ViewKnife.getColor(R.color.pd_label));
            tvError.setBackgroundColor(ViewKnife.getColor(R.color.pd_main_bg));
            tvError.setClickable(true);
            RelativeLayout.LayoutParams rlParams = new RelativeLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            rlParams.addRule(RelativeLayout.BELOW, R.id.pd_toolbar_id);
            ((RelativeLayout) toolbar.getParent()).addView(tvError, rlParams);
        }
        if (tvError.getVisibility() != View.VISIBLE) {
            tvError.setVisibility(View.VISIBLE);
        }
        tvError.setText(TextUtils.isEmpty(msg) ? ViewKnife.getString(R.string.pd_error_msg) : msg);
    }
Provide an opportunity to start asynchronous tasks<p>
If we perform an asynchronous task in onViewCreated and the task is completed before
the animation completes. At this point, the padding data triggers the re-measure
and causes an animation exception.<p>

Callback when the fragment animation ends, later than onViewCreated

@param container
pandora-core/src/main/java/tech/linjiang/pandora/ui/fragment/BaseFragment.java