Intereting Posts
Изображение uri не отображает изображения на ImageView на некоторых устройствах Android Убивать приложение для Android в режиме паузы Открытие сырьевого ресурса с помощью теста Robolectric Когда я должен вызвать метод закрытия базы данных SQLite на Android Отключить главную кнопку в Android ICS (4.0) Подсчет байтов низкого уровня URLConnection Измерение кампании с помощью собственного BroadcastReceiver Виджет onUpdate, onReceive Twitter не работает с twitter4j в android Получаю ли я бонус за производительность, если я попытаюсь использовать команды ассемблера для математических команд вместо c Как перечислить пары ключевых значений пакета Android & Maven: ускорить компиляцию и развертывание проекта Как использовать новую функцию Android M для «Выбор текста», которая будет предлагаться за пределами вашего приложения? Сообщение форума Сохранение состояния вкладки во время изменения ориентации

Фрагментные транзакции с переходом – Требуются уникальные имена перехода

Я хочу перейти от представления списка к подробному представлению, и поэтому я использую следующий OnClickListener в своем списке:

 @Override public void onClick(View view) { Bet bet = (Bet)view.getTag(); FragmentManager fm = getActivity().getSupportFragmentManager(); BetDetailFragment f = BetDetailFragment.create(bet); String tag = f.getClass().getName(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); f.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); } FragmentTransaction ft = fm.beginTransaction() .replace(R.id.frame_container, f, tag) .addToBackStack(tag); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Ld(this, "TRANS: " + TransitionUtil.getTransitionNameBetLogo1(bet) + "|" + view.findViewById(R.id.ivLogo1)); Ld(this, "TRANS: " + TransitionUtil.getTransitionNameBetLogo2(bet) + "|" + view.findViewById(R.id.ivLogo2)); ft.addSharedElement(view.findViewById(R.id.ivLogo1), "1");//TransitionUtil.getTransitionNameBetLogo1(bet)); ft.addSharedElement(view.findViewById(R.id.ivLogo2), "2");//TransitionUtil.getTransitionNameBetLogo2(bet)); } ft.commit(); } 

Мои функции возвращают уникальные имена, у меня два разных вида, но все равно это не работает. Я уже прокомментировал ненужные функции и написал там уникальные имена транзакций … Но все же я получаю это исключение в строке первого addSharedElement :

 java.lang.IllegalArgumentException: Unique transitionNames are required for all sharedElements at android.support.v4.app.BackStackRecord.addSharedElement 

РЕДАКТИРОВАТЬ

Без общих элементов все работает отлично …

Solutions Collecting From Web of "Фрагментные транзакции с переходом – Требуются уникальные имена перехода"

Проблема заключается в том, что addSharedElement НЕ устанавливает имя транзакции для представления!

Поэтому в моем примере мне пришлось бы установить его с помощью следующего кода:

 ViewCompat.setTransitionName(view.findViewById(R.id.ivLogo1), "1"); ViewCompat.setTransitionName(view.findViewById(R.id.ivLogo2), "2"); 

Перед добавлением этих представлений в FragmentTransaction

Впоследствии следующие работы просто прекрасны и как ожидалось:

 ft.addSharedElement(view.findViewById(R.id.ivLogo1), "1"); ft.addSharedElement(view.findViewById(R.id.ivLogo2), "2"); 

Если ваш onClickListener является частью вашего фрагмента, а не родительской, то вы делаете что-то неправильно здесь. Ваш фрагмент должен уведомлять родительскую активность о том, чего она хочет, и активировать ее (например, путем замены фрагментов и т. Д.). Фрагмент никогда не должен делать это сам по себе. Кроме того, если вам нужно только перейти от подробного представления к списку, я предполагаю, что вы ввели свой подробный вид из этого списка. Если это так, все, что вам нужно, – вырезать последний элемент (фрагмент фрагмента) из стека. См. https://developer.android.com/reference/android/app/FragmentManager.html.