2

Я потерял сегодня несколько часов, потому что мой функциональный код больше не работал. Код для перезагрузки вида фрагмента не работал больше после обновления до новой версии поддержки библиотеки 25.1.0:Обновить фрагмент больше не работает

Это мой код:

FragmentManager manager = getActivity().getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = manager.beginTransaction(); 
fragmentTransaction.detach(fragment); 
fragmentTransaction.attach(fragment); 
fragmentTransaction.commit(); 

Я пытался отладить выкладывание точки останова на

public void onPause() 
public void onStop() 
public void onAttach(Context context) 
public void onDetach() 
public void onDestroyView() 
public void onDestroy() 

но приложение не входит ни в одну из этих функций, и на экране ничего не происходит.

Если я вызываю отсоединение самостоятельно, без приложения, приложение вводит onPause и onStop, и представление покидает экран.

+1

Вы должны разделить это на вопрос, а затем ответить на свой вопрос. Не ставьте вопрос и ответ вместе, это запутывает. –

+0

@RickS хорошо, все готово;) –

+0

Спасибо! Через некоторое время вы сможете отметить это как принятый ответ. –

ответ

3

Я столкнулся с той же проблемой и не нашел ответа в режиме онлайн. Наконец, я узнал, что некоторые оптимизации были добавлены в Fragment Transactions в редакции 25.1.1 библиотеки поддержки. (см. https://developer.android.com/topic/libraries/support-library/revisions.html#25-1-1). Отключение тех, для транзакции будет заставить его работать, как ожидалось:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.setAllowOptimization(false); 
transaction.detach(fragment).attach(fragment).commitAllowingStateLoss(); 

Update

setAllowOptimization устарела. Вместо этого используйте setReorderingAllowed.

+0

Почему вы предлагаете использовать 'commitAllowingStateLoss' вместо просто' commit'? – Aba

1

Большое спасибо за это. Вот небольшая модификация, которую я сделал для использования getSupportFragmentManager

FragmentTransaction t = getActivity().getSupportFragmentManager().beginTransaction(); 
t.setAllowOptimization(false); 
t.detach(this).attach(this).commitAllowingStateLoss(); 
Смежные вопросы