Это странная ошибка, с которой я сейчас борюсь.
У меня есть действие, которое отображает фрагмент поиска после завершения инициализации. Фрагмент поиска содержит представление списка для отображения результатов, и это представление списка находится внутри SwipeRefreshLayout, чтобы пользователь мог обновить результаты поиска.
Если пользователь выбирает элемент из списка, фрагмент поиска удаляется и отображается родительская операция (у нее есть другие фрагменты). Пользователь может выбрать открытие фрагмента поиска и обновить результаты, если пожелает.
У меня есть такое поведение, что если они используют обновление смахивания при первом открытии фрагмента, оно работает должным образом. Однако, если они отклонят фрагмент поиска, а затем снова откроют его, а затем проведут пальцем вниз для обновления, я получу исключение java.lang.IllegalStateException: Fragment already added
для фрагмента поиска.
Код для ввода фрагмента поиска в первый раз:
@Override
protected void onPostExecute(Void empty) {
dismissSearchProgress();
getFragmentManager().beginTransaction().
setCustomAnimations(R.animator.slide_in_left, 0, 0, R.animator.slide_out_left).
add(R.id.main_vwContent, mWoSearchFragment).commit();
}
Во второй раз код вводится путем смахивания по экрану:
case MotionEvent.ACTION_UP:
if (swipeInRange) {
/* do some other stuff */
getFragmentManager().beginTransaction().setCustomAnimations(R.animator.slide_in_left, 0, 0, R.animator.slide_out_left).add(R.id.main_vwContent, mWoSearchFragment).commit();
}
break;
Во втором экземпляре не возникает ошибок, если они не смахивают вниз для обновления. Ошибка возникает перед срабатыванием события onRefresh.
У кого-нибудь есть идеи? Не уверен, какой код пытается снова добавить фрагмент поиска, поскольку исключение не содержит моего кода в трассировке стека, а отладчик ничего не улавливает.