0

我有一个 FragmentActivity,在片段中,我想为 2 个视图之间的过渡设置动画(基本上是 2 个线性布局,一次只能看到一个)。

public void showError() {
    if (getActivity() == null) return;
    if (mErrorView.getVisibility() == View.VISIBLE) return;
    if (mListView.getVisibility() == View.VISIBLE) {
        mListView.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_out));
    }
    if (mSpinnerView.getVisibility() == View.VISIBLE) {
        mSpinnerView.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_out));
    }
    mErrorView.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in));

    mListView.setVisibility(View.GONE);
    mErrorView.setVisibility(View.VISIBLE);
    mSpinnerView.setVisibility(View.GONE);
}

它工作正常,但我从 getActivity() 上具有 NPE 的用户那里收到了很多崩溃报告。因此,即使我在进入之前检查非空,我也会进入它变为空的状态(可能是因为动画是异步的?)。

我觉得我做的动画不正确,有没有更好的方法来防止所有 NPE 困扰我的用户?

4

1 回答 1

0

我不确定 getActivity 是如何变为空的,但为了避免它,为什么不在空检查之前存储该值。这样,您就可以维护对它的引用,该引用不能为空。就像是:

public void showError() {
    Activity activity = getActivity();
    if (activity == null) return;
//Other Code
    mErrorView.startAnimation(AnimationUtils.loadAnimation(activity, android.R.anim.fade_in));
//Rest of code
}
于 2012-07-21T06:50:14.297 回答