0

FragmentActivity があり、フラグメント内で 2 つのビュー (基本的には 2 つの linearlayout、一度に 1 つだけ表示) 間の遷移をアニメーション化したいと考えています。

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 を使用しているユーザーから多くのクラッシュ レポートが寄せられています。なので、入る前に非nullをチェックしていても、nullになってしまう状態になってしまいます(アニメーションが非同期だからかな?)。

アニメーションを正しく行っていないように感じます。それを行い、すべての NPE がユーザーを悩ませないようにするより良い方法はありますか?

4

1 に答える 1

0

getActivity がどのように null になっているかはわかりませんが、それを避けるために、null チェックの前に値を保存してください。そうすれば、null にならない参照を維持できます。何かのようなもの:

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 に答える