Замена фрагмента не работает должным образом во время выполнения swipeRefresh

У меня есть фрагмент A, который включает SwipeRefresh и RecycleView. Когда пользователь нажимает на элемент в RecycleView, я заменяю новый фрагмент, который является B:

mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
 @Override
 public void onItemClick(View view, int position) {
 Item tem = mItems.get(position);
 // selected item
 Log.i(TAG, item.getTitle() + " clicked. Replacing fragment.");
 // We start the fragment transaction here. It is just an ordinary fragment transaction.
 getActivity().getSupportFragmentManager()
 .beginTransaction()
 .replace(R.id.content_fragment,
 FragmentB.newInstance(item,
 (int) view.getX(), (int) view.getY(),
 view.getWidth(), view.getHeight())
 )
 // We push the fragment transaction to back stack. User can go back to the
 // previous fragment by pressing back button.
 .addToBackStack("detail")
 .commit();
 }
 });

Возникает проблема:

Когда я начинаю обновляться с помощью SwipeRefresh, и он все еще работает, я нажимаю на элемент (как вы видите код выше), фрагмент B будет заменен на under фрагмент A на экране. Я могу увидеть фрагмент B под моим RecycleView в фрагменте A! Я больше не могу прокручивать в recycleView, поскольку onStop() вызывается в фрагменте A и onCreateView вызывается в фрагменте B.

В чем может быть причина? у вас есть обходное решение?

Приложения: Сбой может быть воспроизведен и в образце google:

https://github.com/googlesamples/android-FragmentTransition/

2 ответа

Его ошибка. Google может исправить это в ближайшее время.

Проблема 78062


Я встретил один и тот же вопрос, и я даже не использовал addToBackStack, сначала я думаю, что фрагмент не был заменен, но я начинаю новый поток и пытаюсь найти старый фрагмент с помощью managermanager и find что он был заменен, я думаю, что то, что вы видите, не является реальным фрагментом, вы можете рассматривать его как phantom, который создается в представлении swipe, чтобы показать анимацию.

По совпадению, я нахожу, что если вы установитеTransition() для транзакции, и он будет работать правильно, возможно, анимация перехода делает трюк.

licensed under cc by-sa 3.0 with attribution.