Анимация перехода фрагмента вызвала ANR на уровне API 22 - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть макет верхней вкладки, при выборе одной вкладки она переключает фрагменты с анимацией слайда влево / вправо.

Для уровня API 22 следующий код вызывает ANR: он не выдает никакой ошибкисообщение, но комментирование следующего кода заставляет его работать.

if (position > curSelectTab) {
        mFragments[curSelectTab].setExitTransition(inflater.inflateTransition(R.transition.slide_out_to_left));
        mFragments[position].setEnterTransition(inflater.inflateTransition(R.transition.slide_in_from_right));
    } else if (position < curSelectTab){
        mFragments[curSelectTab].setExitTransition(inflater.inflateTransition(R.transition.slide_out_to_right));
        mFragments[position].setEnterTransition(inflater.inflateTransition(R.transition.slide_in_from_left));
    }

Вот как я переключаю фрагменты:

private void onTabSelected(int position) {
    //switch tab
    int curSelectTab = mSelectTab;
    SearchResultFragment fragment = mFragments[position];
    TransitionInflater inflater = TransitionInflater.from(this);
    if (fragment == null) {
        switch (position){
            case 0:
                mFragments[0] = SearchResultFragment.newInstance(SearchResultFragment.TYPE_ALL_NOTE, mQuery);
                break;
            case 1:
                mFragments[1] = SearchResultFragment.newInstance(SearchResultFragment.TYPE_NOTE_NAME, mQuery);
                break;
            case 2:
                mFragments[2] = SearchResultFragment.newInstance(SearchResultFragment.TYPE_NOTE_CONTENT, mQuery);
                break;
            default:
                break;
        }
        fragment = mFragments[position];
    }

    //add Fragment
    if (!fragment.isAdded()) {
        getFragmentManager().beginTransaction().add(R.id.fl_container, fragment).commit();
    }

    if (position > curSelectTab) {
        mFragments[curSelectTab].setExitTransition(inflater.inflateTransition(R.transition.slide_out_to_left));
        mFragments[position].setEnterTransition(inflater.inflateTransition(R.transition.slide_in_from_right));
    } else if (position < curSelectTab){
        mFragments[curSelectTab].setExitTransition(inflater.inflateTransition(R.transition.slide_out_to_right));
        mFragments[position].setEnterTransition(inflater.inflateTransition(R.transition.slide_in_from_left));
    }
    getFragmentManager().beginTransaction().hide(mFragments[curSelectTab]).commit();
    getFragmentManager().beginTransaction().show(mFragments[position]).commit();
    mSelectTab = position;
}

Вот одна из моих анимаций перехода slide_in_from_right

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <slide android:slideEdge="end" />
    <fade android:fadingMode="fade_in" android:duration="100"/>
</transitionSet>

ANR происходит только на уровне API 22, это хорошо на уровне API 23.

Кто-нибудь знает почему?анимация перехода не поддерживается на уровне API ниже 23?Я думал, что поддерживается более 21

...